linux的mkdir 函數原型如下:
int mkdir(const char *pathname, mode_t mode);
今天使用linux的mkdir創建目錄。
函數說明:
mkdir()函數以mode方式創建一個以參數pathname命名的目錄,mode定義新創建目錄的權限。
返回值:
若目錄創建成功,則返回0;否則返回-1,並將錯誤記錄到全局變量errno中。
mode方式:
S_IRWXU | 00700權限,代表該文件所有者擁有讀,寫和執行操作的權限 |
S_IRUSR(S_IREAD) | 00400權限,代表該文件所有者擁有可讀的權限 |
S_IWUSR(S_IWRITE) | 00200權限,代表該文件所有者擁有可寫的權限 |
S_IXUSR(S_IEXEC) | 00100權限,代表該文件所有者擁有執行的權限 |
S_IRWXG | 00070權限,代表該文件用戶組擁有讀,寫和執行操作的權限 |
S_IRGRP | 00040權限,代表該文件用戶組擁有可讀的權限 |
S_IWGRP | 00020權限,代表該文件用戶組擁有可寫的權限 |
S_IXGRP | 00010權限,代表該文件用戶組擁有執行的權限 |
S_IRWXO | 00007權限,代表其他用戶擁有讀,寫和執行操作的權限 |
S_IROTH | 00004權限,代表其他用戶擁有可讀的權限 |
S_IWOTH | 00002權限,代表其他用戶擁有可寫的權限 |
S_IXOTH | 00001權限,代表其他用戶擁有執行的權限 |
今天使用該函數創建目錄,希望創建一個775的權限的目錄。但是創建一直失敗。
后來查閱資料后發現
需要先調用umask函數。
該函數原型:mode_t umask(mode_t mask);
函數說明
|
umask()會將系統umask值設成參數mask&0777后的值,然后將先前的umask值返回。在使用open()建立新文件時,該參數mode並非真正建立文件的權限,而是(mode&~umask)的權限值。例如,在建立文件時指定文件權限為0666,通常umask值默認為022,則該文件的真正權限則為0666&~022=0644,也就是rw-r--r--返回值此調用不會有錯誤值返回。返回值為原先系統的umask值。 |
因此,創建775的目錄,需要先執行umask(0) 然后再調用mkdir函數。這樣就成功了。