creat:
建立檔案,顯然引數只需要(路徑path,許可權mode)。
1、如果檔案存在怎麼辦?直接覆蓋掉!不管你裡面有沒有內容。
#include #include #include #includeusing namespace std;
int main()
建立成功,但是有個問題。
給的許可權八進位制777最大許可權,但是檢視許可權的並不是。
此處設定的mode的值並不是檔案最終的許可權,檔案最終的許可權是按照mode & ~umask得到的,而預設的umask是0022,所以如果想按照mode的值設定檔案許可權,需要在建立檔案之前將umask的值設定為0000。加一
句umask(
0000
),即可。
open:
我們先自己分析一下open需要提供哪些功能。
1、要開啟乙個檔案,顯然要給出路徑path,還有開啟方式flag(唯讀、只寫、可讀可寫).
檔案的開啟方式跟許可權是有區別的,比如檔案的user擁有所有許可權,但是它也可以唯讀開啟檔案,有許可權我不一定用。
2、如果開啟的檔案不存在怎麼辦?應該要file not exit !報錯。還應該提示是否建立這樣乙個新的檔案,這時候需要第三個引數mode,表示新建立的檔案的許可權。
然而,open()真的是如我們分析的嗎?
關於新建檔案:
使用create函式:
建立乙個檔案,如果用creat(path ,mode )函式,則為只寫。因為creat的返回值也是乙個fd。所以你可以緊接著用這個fd,但是只能寫!
1、檔案不存在時候:建立乙個新檔案。只寫。
2、檔案存在時,直接清零,不管之前的檔案是否有內容。
相當於open(path,o_wronly|creat|o_ trunc,0777)
用open可以隨心所欲:
檔案不存在,可建立唯讀、只寫、或者可讀可寫的檔案
檔案存在時,可以將其清0,或者追加。
檔案存在時,可報錯 file exits!
所以可以完全不用create,以後就用open來進行建立。
關於開啟檔案:
開啟檔案只能用open函式。
返回乙個fd,對開啟的而檔案, 有唯讀、只寫、可讀可寫三種基本方式。
其它還有:
清零,每次寫的時候,先清零(這個只在
只寫方式下有效)。
舉幾個例子:
1、建立乙個檔案,並給予最大許可權,如果檔案已經存在,則報錯。
#include#include#include#include#include#include#includeint main()
else
close(fd);
return 0;
}
linux下open函式和creat函式
open 函式用於開啟和建立檔案。以下是 open 函式的簡單描述 include fcntl.h int open const char path,int access,int mode 返回值 成功則返回檔案描述符,否則返回 1 path 要開啟的檔案路徑和名稱 如 c cpp a.cpp ac...
open 系統呼叫的實現
open系統呼叫的服務例程是sys open 函式,它接受三個引數 要開啟檔案的路徑名filename,訪問模式的表示flags和檔案許可權掩碼mode。在核心中,sys open實際呼叫do sys open函式來完成所有操作。do sys open主要執行如下操作 1,通過getname 從程序...
open 系統呼叫的實現
open系統呼叫的服務例程是sys open 函式,它接受三個引數 要開啟檔案的路徑名filename,訪問模式的表示flags和檔案許可權掩碼mode。在核心中,sys open實際呼叫do sys open函式來完成所有操作。do sys open主要執行如下操作 1,通過getname 從程序...