前言
前文對 Linux 中的許可權進行了較為透徹的分析。而本文,則在前文的基礎上,具體說明如何在程式碼中進行許可權控制。
下面的程式碼涉及到以下幾個方面:
1. 建立檔案時設定檔案許可權
2. 修改檔案的預設許可權
3. 修改已建立檔案的許可權
在閱讀具體實現程式碼前,請先大致瞭解如下許可權巨集。
Linux 中的許可權巨集
程式碼實現
1 #include "apue.h" 2 #include <fcntl.h> 3 4 #define RWRWRW (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH) 5 6 int 7 main(void) 8 { 9 struct stat statbuf; 10 umask(0); 11 12 // 按照巨集 RWRWRW 指定的許可權建立檔案 13 if (creat("foo", RWRWRW) < 0) 14 err_sys("creat error for foo"); 15 // 修改預設許可權 - 遮蔽掉建立檔案的組讀寫和其他使用者讀寫許可權 16 umask(S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH); 17 if (creat("bar", RWRWRW) < 0) 18 err_sys("creat error for bar"); 19 20 // 獲取檔案許可權資訊 21 if (stat("foo", &statbuf) < 0) 22 err_sys("stat err for foo"); 23 // 在檔案原來的許可權資訊的基礎上,進行增加/刪除許可權。 24 // 下面的示例刪除了組執行許可權並增加了設定組ID位。 25 if (chmod("foo", (statbuf.st_mode & ~S_IWGRP) | S_ISGID) < 0) 26 err_sys("chmod err for foo"); 27 exit(0); 28 }
執行測試
執行程式後,檢視 foo 檔案的許可權,與預計相符:
小結
Linux中設定狀態位的方法大概都是用巨集指定;刪除狀態位語法為原來的狀態位 &~ 巨集;增加狀態位語法為原來的狀態位 | 巨集。