creat 與open 系統呼叫

2021-07-12 03:17:30 字數 1509 閱讀 6443

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 從程序...