1. 程式人生 > >mkdir中設定資料夾訪問許可權不起作用

mkdir中設定資料夾訪問許可權不起作用

問題描述:

在使用下面函式設定資料夾訪問許可權時,發現建立的資料夾的訪問許可權其實不是自己傳進去的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)