用C操作Linux目錄時,遇到幾個mkdir小問題,順帶總結一下,在Linux上操作文件或目錄,遇到最多的可能就是權限問題了,都是顯式錯誤,所以這些問題在開發階段就很容易暴露和解決。畢竟不是只做Linux平台開發,所以過些日子說不准又會忘記了。
mkdir的函數原型(使用時需包含#include <sys/stat.h>):
int mkdir(const char *path, mode_t mode);
參數:
path——目錄名,比如abc,/var/www/abc等
mode——目錄權限
返回值:
返回0 表示成功, 返回 -1表示錯誤,並且會設置errno值。
當然你也可以不用那些類似S_IRWXU、S_IRUSR...類似的宏參數,畢竟很難記憶,反倒不如8進制的0421好記。組合樣式為:owner-group-others,不同人都分三個規則讀-寫-執行(r-w-x),全部許可就是7。
試一下:
mkdir("test",0777);
寫成mkdir("test",777)有可能無法執行。但是依稀記得,以前都是用777的也沒錯誤,具體忘記了,反正按照規范寫絕對沒錯。
另外假設你的程序目錄在/root/abc/下,那麼如果你的程序執行時想在/var/www下創建目錄時,有可能你始終創建一個0777的目錄總是創建成0755目錄,這時可以嘗試使用umask(0)命令。
umask只對當前目錄有效,默認umask值為0022,所以你無法在另外一個地方直接創建0777的目錄。
而是0777-0022=0755
/etc/passwd和/etc/group找到UID和gid
mkdir /var/ugroup
我們可以直接使用chown來改變文件所有者。
chown root:newuser /var/ugroup
修改權限
chmod 740 /var/ugroup/*
定位到該用戶組目錄下,執行:
ls -all
會顯示類似:
drwxrwxr-x
這樣的結果(0775)。