2009-08-27 100 views
6

在我的C程序如下行應該提供的所有/組/用戶讀取和寫入權限mkfifo文件權限沒有被正確執行

mkfifo("/tmp/dumbPipe", 0666) 

但是,一旦我執行的代碼,並檢查了寫入的權限非位被設置,我結束了

prw-r--r-- 

業主是一樣的,這是一個問題,因爲我在tmp目錄中創建管道?當我從cmd行運行chmod 666時,所有權限都可以正確設置。

回答

9

這是一個沒有意見後,只是引述手冊。 Brievity等從人3 mkfifo

引用:

它是由過程的umask以通常的方式修改:所創建的文件的權限是(模式&〜umask的)。

從人2的umask報價

的進程的umask典型的默認值是S_IWGRP | S_IWOTH(八進制022)。在作爲模式參數 打開指定(2)通常情況下:

 S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH 

    (octal 0666) when creating a new file, the permissions on the resulting file will be: 

     S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH 

    (because 0666 & ~022 = 0644; i.e., rw-r--r--). 
0

薩拉姆, 我知道這是晚,但對於其他用戶,我選擇寫此評論 即使你精確0666作爲許可,您應該知道,有一個是被稱爲「進程的文件模式創建」的另一個因素,所以問題是:

如何改變當前的進程文件模式創建?

答:在你的程序的開頭使用的umask(許可) - 並給予0000許可

http://www.cyberciti.biz/tips/understanding-linux-unix-umask-value-usage.html

這應該幫助。