2012-09-19 60 views
0

我正在使用開放系統調用創建一個具有完全權限(777)的文件,但是當我做ls -li時只能看到權限(755)。那麼請您告訴爲什麼文件權限不是777?開放系統調用linux的文件權限問題

代碼

#include <fcntl.h> 
#include <sys/types.h> 
#include <sys/stat.h> 

int main() 
{ 
     int fd; 

     /* Creates a file with full permission*/ 
     fd = open("test",O_CREAT | O_RDWR |O_APPEND ,0777); 

     if(fd= -1) 
     { 
       return -1; 
     } 

     close(fd); 
} 

輸出

 $ ls -l 
    -rwxr-xr-x 1 ubuntu ubuntu 0 2012-09-19 11:55 test 
+2

它與'umask'有關。見例如http://www.cyberciti.biz/tips/understanding-linux-unix-umask-value-usage.html –

回答

4

有由系統維護的值稱爲umask;它是過程的一個屬性,就像PID(進程ID)或EUID(有效用戶ID)一樣。它將被設置爲022(八進制),這表示系統應該從創建的文件中刪除組和其他寫入權限。

您可以在使用open()之前致電umask(0);,以便您在open()中指定的模式不會被更改。你當然應該這樣做來證明umask是問題所在。但是,通常最好讓用戶選擇umask爲準 - 如果某個程序不遵守我的umask設置,那麼我對其中一個會變得非常鬆散;在我發現並驗證問題後,它往往不會再使用。

該shell還有一個(內置)命令umask,您可以使用它。 022值是一個合理的默認值;大多數時候,你不想讓任何人寫你的文件。

2

創建的文件的權限受當前進程umask的限制 - 當前的umask022,因此組和世界寫入默認情況下始終處於禁用狀態。 (在大多數情況下,這是一件好事。)如果你真的想要一個組和全世界可寫的文件,你需要在創建這個文件時臨時設置umask(0)(確保保存系統調用返回的舊值,然後將其設置回來!),或者使用chmod()「手動」設置文件的權限。