開啟檔案、新建檔案和關閉檔案操作
開啟檔案操作使用系統呼叫函式open(),該函式的作用是建立乙個檔案描述符,其他的函式可以通過檔案描述符對指定檔案進行讀取與寫入的操作。開啟檔案的一般形式是:
open(檔案路徑, 標誌);
函式的返回值是檔案描述符,如果開啟檔案成功返回乙個正整數,否則返回-1。標誌是用於指定開啟檔案操作模式的列舉常量,主標誌如表13.1所示。
表13.1 開啟檔案操作的主標誌
參 數
說 明
參 數
說 明
o_rdonly
以唯讀方式開啟檔案
o_rdwr
以可讀寫方式開啟檔案
o_wronly
以只寫方式開啟檔案
主標誌是互斥的,使用其中一種則不能再使用另外一種。除了主標誌以外,還有副標誌可與它們配合使用,副標誌可同時使用多個,使用時在主標誌和副標誌之間加入按位與(|)運算子,如表13.2所示。
表13.2 開啟檔案操作的副標誌
參 數
說 明
讀寫檔案從檔案尾部開始移動,所寫入
的資料追加到檔案尾
o_trunc
若檔案存在並且以可寫的方式開啟時,
此標誌會將檔案長度清為0,而原來存於
該檔案的資料也會消失
o_creat
若路徑中的檔案不存在則自動建立該檔案
o_excl
如果與o_creat同時設定,此指令會去檢
查檔案是否存在,檔案若不存在則建立該文
件,否則將導致開啟檔案錯誤。此外,若
o_creat與o_excl同時設定,並且將要
開啟的檔案為符號連線,則將導致開啟檔案失敗
新建檔案操作是在開啟檔案操作的函式上加入o_creat副標誌實現的。當路徑中的檔案不存在時,則建立乙個新檔案。建立新檔案的同時可設定檔案的許可權,這時函式需要增加一組實際引數,形式為:
open(檔案路徑, 標誌, 許可權標誌);
檔案許可權標誌如表13.3所示。
表13.3 檔案許可權標誌
參 數
說 明
參 數
說 明
s_irusr
所有者擁有
讀許可權s_ixgrp
群組擁有執
行許可權s_iwusr
所有者擁有
寫許可權s_iroth
其他使用者擁
有讀許可權
s_ixusr
所有者擁有
執行許可權
s_iwoth
其他使用者擁
有寫許可權
s_irgrp
群組擁有讀許可權
s_ixoth
其他使用者擁
有執行許可權
s_iwgrp
群組擁有寫許可權
檔案許可權標誌也可以使用加權數字表示,這組數字被稱為umask變數,它的型別是mode_t,是乙個無符號八進位制數。umask變數的定義方法如表13.4所示。umask變數由3位數字組成,數字的每一位代表一類許可權。使用者所獲得的許可權是加權數值的總和。例如764表示所有者擁有讀、寫和執行許可權,群組擁有讀和寫許可權,其他使用者擁有讀許可權。
表13.4 umask變數表示方法
加 權 數 值
第1位第2位
第3位4
所有者擁有
讀許可權群組擁有讀許可權
其他使用者擁
有讀許可權
2所有者擁有
寫許可權群組擁有寫許可權
其他使用者擁
有寫許可權
1所有者擁有
執行許可權
群組擁有執行許可權
其他使用者擁
有執行許可權
新建檔案的另乙個函式是creat(),該函式的一般形式是:
creat(路徑, umask);
當檔案被成功建立函式的返回值為0,否則為-1。當檔案不需要使用了,則可以使用close()函式關閉檔案。關閉檔案的一般形式為:close(檔案描述符),如果關閉檔案成功,close()函式的返回0,否則返回-1。
下例將演示開啟檔案、新建檔案和關閉檔案這3種操作。程式的邏輯為:指定乙個路徑,如果該檔案存在,輸出提示資訊,關閉該檔案;如果該檔案不存在,則新建檔案並設定檔案屬性,輸出提示資訊,然後關閉該檔案。完整的**如下:
#include // 提供open()函式
#include // 提供mode_t型別
#include // 提供open()函式的符號
#include // 提供close()函式
#include
int main()
} else
puts("檔案開啟成功");
close(f); // 關閉檔案
return 0;
} 該程式首先判斷是否存在檔案test,判斷的方法是用open()函式開啟test檔案,如果返回值是-1,則表示該檔案不存在(有時候並非如此)。當檔案不存在時,使用open()函式建立該檔案,並在程式最後關閉。為mode_t型變數f_attrib賦值的方法使用了按位計算操作,將表示檔案許可權的常量進行按位或計算,計算的結果與八進位制數0664相同,如圖13.3所示。
Linux open 函式練習
1 先用man 2 open檢視一下open函式介面 2 最簡單的open函式 3 open 乙個檔案,返回的檔案描述符從3開始增加,引數o creat表示當 abc 不存在時建立乙個,但是由於umask一開始是002,所以建立出來的許可權不是777,而是775,設定umask為000之後再執行一下...
Linux open函式簡介
open 函式用於開啟和建立檔案。以下是 open 函式的簡單描述 include fcntl.h int open const char pathname,int oflag,返回值 成功則返回檔案描述符,否則返回 1 對於 open 函式來說,第三個引數 僅當建立新檔案時才使用,用於指定檔案的訪...
main函式引數說明
main函式引數說明 字元指標陣列 include void fun int a 10 void fun int a void fun int a void print array char p 100 int n void print array char p,int n void print a...