2015-03-30 52 views
2

我正在嘗試向文件寫入字符串,並將該文件的權限設置爲777.生成的文件爲空,並且具有775的權限。模式掩碼似乎是正確的,當我檢查訪問()時,它返回0.我可以chmod文件到777(不使用sudo)。這是怎麼回事?將權限設置爲777,生成的文件爲775

運行Ubuntu 14.10。硬盤是ext3/4。

if (argc == 1) { 
    int fd = open ("sampleFile", O_CREAT , S_IRWXU | S_IRWXG | S_IRWXO); 
    int writ = 0xDEADBEEF; 

    if (fd != -1) { 
     char str [] = "My permission should be set to 777."; 
     writ = write (fd, &str, (int)strlen (str)); 
     //writ = access ("sampleFile", W_OK); 
     close (fd); 

     printf ("(%o) %s\n", writ, str); 
     return 0; 
    } 

    else { 
     printf ("Couldn't make sampleFile in pwd.\n"); 
     return 1; 
    } 
} 

回答

2

你有兩個問題:

  1. 的第二個參數write() 「必須包括以下接入模式之一:O_RDONLYO_WRONLY,或O_RDWR」。將O_CREAT更改爲O_CREAT | O_WRONLY以允許寫入文件。

  2. 創建的文件的模式已修改您的umask。您的umask可能是002。 (中002一個umask防止意外創建世界可寫文件。)您可以使用fchmod創建後更改權限:
    fchmod(fd, S_IRWXU | S_IRWXG | S_IRWXO)

+1

1.這是太粗心了。我應該更仔細地閱讀手冊頁。 2.我不知道什麼樣的掩碼,但是在閱讀完人後在終端中調用它後,它就像你懷疑的那樣返回「0002」。我永遠無法把它們放在一起;非常感謝你。 – Lou 2015-03-31 05:47:52

相關問題