(1)open函數
man man?? 查看man文檔的首頁? 其中DESCRIPTION部分描述了man文檔的每一章的章節內容 第2章System calls為系統調用,即Liunx系統函數。 man 2 open 查看第二章的open函數的詳細幫助文件。
open函數用于打開一個已經的文件或者創建一個沒有的文件,其詳細描述如下:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>?? //open函數對應了三個頭文件
?
int open(const char *pathname, int flags);? //打開一個已有的文件
int open(const char *pathname, int flags, mode_t mode); //文件不存在,創建一個新的文件
?
pathname為打開文件的路徑??? mode_t為文件權限的類型,如:777? 764等???? flags參數用于指定打開文件的方式:O_RDONLY(只讀)、O_WRONLY(只寫)或O_RDWR(讀寫),這三個參數是互斥的。flags還可以是:O_CLOEXEC, O_CREAT, O_DIRECTORY, O_EXCL, O_NOCTTY, O_NOFOLLOW, O_TRUNC和 O_TTY_INIT。當采用上述第二個open函數(有三個參數)創建一個文件時,flags需指定為O_CREAT(O_RDWR | O_CREAT)。mode_t為創建的文件指定一個權限。
open函數的返回值。其返回值為打開或創建文件的文件描述符(無符號整數)。如果返回值為-1(EOF),則說明在打開或創建文件時發生了錯誤(打開或創建文件失敗),在這種情況下(函數調用失敗),詳細的錯誤信息保存在全局變量errno中,可以進行查看。
(2)errno全局變量
errno全局變量,是記錄系統的最后一次錯誤代碼(整數值,會被覆蓋),為int類型。errno全局變量定義在頭文件/usr/include/errno.h中,該文件有: extern int errno; 即是對全局變量的聲明。在程序啟動時,errno?設置為零(未初始化全局變量),C 標準庫中的特定函數修改它的值為一些非零值以表示某些類型的錯誤。您也可以在適當的時候修改它的值或重置為零。注意:在使用errno變量時,僅需要包含頭文件errno.h即可。
errno的代碼值(整型值)都進行了宏定義,其定義在兩個頭文件中:/usr/include/asm-generic/errno-base.h(1~34)和 /usr/include/asm-generic/errno.h(35~133)。如下圖所示:
上圖中最后面的注釋部分表示該代碼值所對應的具體是哪一種錯誤類型。每個errno值對應著以字符串表示的錯誤類型,當調用“某些”函數出錯時,該函數會重新設置 errno 的值。為了查看errno代碼值對應的詳細錯誤,需要使用perror函數,其功能如下圖:
perror函數在頭文件stdio.h中聲明,其將errno代表的詳細錯誤類型輸出到標準錯誤流(文件描述符為2),如顯示到屏幕上。其參數s所指的字符串是用戶自己輸入的,以提示用戶這是屬于哪一個操作的錯誤。