linux中open 函式的mode t 含義

2021-06-19 02:11:28 字數 2770 閱讀 2912

開啟檔案、新建檔案和關閉檔案操作

開啟檔案操作使用系統呼叫函式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函式詳解

open 開啟檔案 相關函式 read,write,fcntl,close,link,stat,umask,unlink,fopen 頭文件 include include include 定義函式 int open const char pathname,int flags int open co...

Linux中的open函式簡要說明

與標準c庫中的fopen函式 file fp fp fopen filename arg 不同,linux中用於開啟和建立檔案的open 函式如下 include fcntl.h int open const char pathname,int oflag,mode t mode 返回值 成功則返回...

python中的open函式

這裡簡單記錄一下python中的with open 函式中的引數設定 python的open方法用來開啟乙個檔案。第乙個引數是檔案的位置和檔名,第二個引數是讀寫模式。這裡我們採用w模式,也就是寫模式。在這種模式下,檔案原有的內容將會被刪除。其中對於第二個引數 ru 或 ua 以讀方式開啟,同時提供通...