2014-07-29 23:36:10
在linux下用文件描述符來表示設備文件和普通文件。文件描述符是一個整型的數據,所有對文件的操作都通過文件描述符實現。
文件描述符示文件系統中連接用戶空間和內核空間的樞紐。當打開一個或者創建一個文件時,內核空間創建相應的結構,并生成一個整型的變量傳遞給用戶空間的對應進程。進程用這個文件描述符來對文件進行操作。
文件描述符的范圍示0~OPEN_MAX,因此是一個有限的資源,在使用完畢后要及時釋放,通常示調用從close()函數關閉。注意的是文件描述符的值僅在同一個進程中有效,即不同進程文件描述符,同一個值很可能描述的不是同一個設備或普通文件。在里linux系統中有3個已經分配的文件描述符,即標準輸入,標準輸出和標準錯誤,他們文件描述符的值分別問0 1 和2。可以查看/dev/下的stdin(標準輸入) stout(標準輸出)和stderr(標準錯誤),會發現分別指向/PRoc/self/fd/目錄下的0 1 2文件。
1. 打開創建文件open(),creat()函數
查看函數功能可在終端輸入 man 2 open,此手冊包含了函數所含頭文件,函數功能,函數參數取值
函數原型為:int open(const char *pathname,int flags);
int open(const char *pathname,int flags,mode_t mode);
兩者差別在于flags取值,當你man 2 open的時候你會看到flags的取值,當flags使用O_CREAT時要指定mode的值,其實就是創建文件比說明權限!
以下是一個簡單的打開文件的程序:
1 #include <sys/types.h> 2 #include <sys/stat.h> 3 #include <fcntl.h> 4 #include <stdio.h> 5 6 int main(void) 7 { 8 int fd = -1; //文件描述符聲明 9 char filename[] = "text.txt";//打開的文件名10 fd = open(filename,O_RDWR); //打開的方式為可讀寫方式11 if(fd == -1) //打開失敗12 {13 printf("open file s% is failed!,fd:%d/n",filename,fde);14 }15 else //打開成功16 {17 printf("open file s% sucess!,fd:%d/n",filename,fd);18 }20 return 0;21 }新聞熱點
疑難解答