mkdir中設定資料夾訪問許可權不起作用
阿新 • • 發佈:2019-02-10
問題描述:
在使用下面函式設定資料夾訪問許可權時,發現建立的資料夾的訪問許可權其實不是自己傳進去的mode許可權。
int mkdir(const char *pathname, mode_t mode)
原因解釋如下:
man 2 mkdir 告訴我們:The argument mode specifies the permissions to use. It is modified by the processâs umask in the usual way: the permissions of the created directory are (mode & ~umask & 0777),意思就是,用mkdir建立的資料夾的訪問許可權不是mode ,而是mode & ~umask & 0777,這裡的umask是“資料夾預設許可權”,即“當前使用者在建立檔案或目錄時候的屬性預設值”。
知道了 mode & ~umask & 0777 這個公式,就明白為什麼我們設了mode,卻得不到想要的許可權了。
解決辦法:
先mkdir,然後chmod。
注意:
下面函式中的mode與mkdir中的類似,也存在umask的計算,因此,建議,在open成功後,再做一遍chmod操作,以確保建立的檔案的訪問許可權是正確的。
int open(const char *pathname, int flags, mode_t mode)