在 Linux 環境下以 C 語言操作目錄時,mkdir 函數的權限參數常讓開發者困惑。本文整理函數原型、常見錯誤、umask 影響、建立特定群組目錄及權限檢視指令,助你快速掌握目錄建立的權限控制。
#include <sys/stat.h>
int mkdir(const char *path, mode_t mode);
abc、/var/www/abcerrno雖可使用 S_IRWXU、S_IRUSR 等巨集,但八進制 0421(r=4, w=2, x=1)更直觀易記。權限組合遵循 owner-group-others,各三碼分別對應讀、寫、執行,全開即為 0777。
mkdir("test", 777) 報錯錯誤寫法:mkdir("test", 777)(十進制 777)
正確寫法:mkdir("test", 0777)(八進制 0777)
C 語言中整數常數預設為十進制,需加前綴 0 表示八進制,否則實際權限會錯誤。
umask 影響實際權限程式若在 /root/abc/ 運行,嘗試在 /var/www 建立 0777 目錄卻得到 0755,主因是進程的 umask 預設為 0022。
實際權限 = mode & ~umask → 0777 - 0022 = 0755。
解決:在呼叫 mkdir 前加入 umask(0) 暫時清除遮罩,僅影響當前進程。
mkdir /var/ugroup
chown root:newuser /var/ugroup
chmod 740 /var/ugroup/*
先建立目錄,再以 chown 修改擁有者與群組,最後用 chmod 設定權限(此例:擁有者讀寫執行、群組讀取、其他無權限)。
ls -al
# 輸出範例:drwxrwxr-x (對應 0775)
第一字元 d 表目錄,後九字元分三組對應擁有者、群組、其他權限。