C 使用creat 函式需要注意的事項

2021-09-06 12:02:16 字數 1080 閱讀 4647

#includeint creat(const

char *pathname, mode_t mode);

若成功則返回為只寫開啟的檔案描述符,若出錯則返回-1;

有時候我們使用creat函式的時候可能會得不到我們想要的結果。例如:

creat("

foo",0666)

當我們使用次函式的目的建立乙個檔案——foo,foo的屬性為 -rw-rw-rw-;

但是我們執行完creat函式之後可能會發生其他的結果,筆者的系統是rehl5.1,當我執行完creat函式之後foo的屬性為:-rw-r--r--;

這是為什麼呢?

如果你想知道為什麼,就在命令列裡執行umask看一下吧;

筆者執行完umask的結果為022;umask為何物?

該命令用來設定限制新檔案許可權的掩碼。當新檔案被建立時,其最初的許可權由檔案建立掩碼決定。使用者每次註冊進入系統時,umask命令都被執行,並自動設定掩碼改變預設值,新的許可權將會把舊的覆蓋。

預設情況下root的umask為022,一般使用者為002。通過vim或者vi建立檔案的時候檔案的屬性為 666 - 預設的umask值;建立目錄的時候,目錄的屬性為777 - umask的預設值;

了解了這些,執行creat函式的結果就不會感到意外了。初始的屬性為0666但是預設的umask為022.所以建立檔案的屬性就變成了-rw-r--r--;

如何達到自己想要的結果呢?毫無疑問用umask函式吧;

#includemode_t umask(mode_t cmask);

返回值:以前的檔案模式建立遮蔽字(沒有出錯返回值);

下面用乙個例子直接展示吧!

#include#include

#include

#include

int main(int argc, char *argv)

umask(

022);

if(creat("

bar",0666) < 0

)

return0;

}

結果就不用多說了!

C 使用localtime函式需要注意的地方

cpp include time t tmnow time null tm ptmnow localtime tmnow 從tm結構體中可以取到年月日時分秒等值。這裡localtime返回了乙個tm指標,空間是由localtime自己控制的,所以如果連續呼叫這個函式會有問題。很多時候我們會同時處理兩...

C 使用localtime函式需要注意的地方

cpp view plain copy include time t tmnow time null tm ptmnow localtime tmnow 從tm結構體中可以取到年月日時分秒等值。這裡localtime返回了乙個tm指標,空間是由localtime自己控制的,所以如果 連續呼叫這個函式...

C 使用localtime函式需要注意的地方

在處理時間時用到了localtime這個函式,將乙個utc時間轉為本地時間 cpp include time t tmnow time null tm ptmnow localtime tmnow 從tm結構體中可以取到年月日時分秒等值。這裡localtime返回了乙個tm指標,空間是由localt...