您好,登錄后才能下訂單哦!
這篇文章主要介紹C語言在linux下編程的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
#include <sys/unistd.h> //含有close函數 #include <fcntl.h> //含有open函數 int main(){ int fd=open("text.txt",O_RDONLY); close(fd); } //O_RDONLY是一個宏,代表這個文件只讀,常用的就是這三個 #define O_RDONLY 00 //只讀 #define O_WRONLY 01 //只寫 #define O_RDWR 02 //讀寫都可以
上述的代碼打開了一個文件,隨即又關上了。那個int類型的變量fd叫做文件描述符(file descriptor)。用一個數字代表一個對象,這是C語言常見的設計模式,OpenGL的實現也是類似。
它的底層一般是這樣的:真正操作的對象是一個復雜的結構體,這些對象存放在一個數組中,而數字代表真實對象在數組中的索引值。
在open和 close之間,當然要進行一些讀寫操作,示例如下:
#include <sys/unistd.h> #include <fcntl.h> int main(){ int fd=open("test.txt",O_WRONLY); write(fd,"hello world",11); //向文件中寫入了hello world close(fd); }
看到這,你可能覺得不屑一顧,這和<stdio.h>不是差不多嘛。別急啊兄弟,這個fd可不僅僅代表通常意義的文件,Linux的其中一個設計哲學是:一切皆文件。讓我們列舉一下這個fd能代表什么:
1.文本文件和二進制文件(這兩叫普通文件)
2.目錄文件(可以理解為文件夾)
3.字符設備和塊設備(例如網卡和硬盤)
4.套接字(實現網絡通信的接口,讀寫它相當于網絡通信)
5.符號鏈接(類似于windows桌面上的快捷方式)
6.管道(用于進程通信)
上面這個表你可能記不住,但是我相信你體會到了它的強大。下面是一個向控制臺打印字符串的例子。
#include <sys/unistd.h> #include <fcntl.h> int main(){ write(STDOUT_FILENO,"hello world",11); } //上面的STDOUT_FILENO是一個宏,表示標準輸出,它們的定義是這樣的: #define STDIN_FILENO 0 /* Standard input. */ #define STDOUT_FILENO 1 /* Standard output. */ #define STDERR_FILENO 2 /* Standard error output. */
因為0,1,2都已經被占用了,所以我們的fd是從3開始的,如果出錯(如文件不存在)則會返回一個負數。維護fd的數組在表示進程的結構體中,所以fd只在它所在的進程有意義。不同的進程可以有相同的fd
雖然統一的fd設計的非常好,但是它并不能讓我們看到文件的容量、修改日期等信息。所以還有其他函數供我們使用。
//需包含<sys/stat.h>頭文件,其詳細內容如下所示 int stat (const char *file_name,struct stat *buf); struct stat { dev_t st_dev; /* ID of device containing file */文件使用的設備號 ino_t st_ino; /* inode number */ 索引節點號 mode_t st_mode; /* protection */ 文件對應的模式,文件,目錄等 nlink_t st_nlink; /* number of hard links */ 文件的硬連接數 uid_t st_uid; /* user ID of owner */ 所有者用戶識別號 gid_t st_gid; /* group ID of owner */ 組識別號 dev_t st_rdev; /* device ID (if special file) */ 設備文件的設備號 off_t st_size; /* total size, in bytes */ 以字節為單位的文件容量 blksize_t st_blksize; /* blocksize for file system I/O */ 包含該文件的磁盤塊的大小 blkcnt_t st_blocks; /* number of 512B blocks allocated */ 該文件所占的磁盤塊 time_t st_atime; /* time of last access */ 最后一次訪問該文件的時間 time_t st_mtime; /* time of last modification */ /最后一次修改該文件的時間 time_t st_ctime; /* time of last status change */ 最后一次改變該文件狀態的時間 };
以上是“C語言在linux下編程的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。