linux mkdir函數使用注意


 

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函數。這樣就成功了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM