我創建一個文件,如下所示奇怪的行爲創造
int fd = creat(file_path.c_str() ,S_IRWXU|S_IRWXG|S_IRWXO);
雖然我提供的所有權限給所有三個實體,它將創建一個具有以下權限的文件。
-rwxr-xr-x
我創建這個目錄中有權限設置爲
drwxrwxrwx
的umask
0022
你們可以請有什麼建議可能是錯的?
編輯:我可以chmod該文件給它我準備的權限。我很好奇爲什麼上述失敗。
我創建一個文件,如下所示奇怪的行爲創造
int fd = creat(file_path.c_str() ,S_IRWXU|S_IRWXG|S_IRWXO);
雖然我提供的所有權限給所有三個實體,它將創建一個具有以下權限的文件。
-rwxr-xr-x
我創建這個目錄中有權限設置爲
drwxrwxrwx
的umask
0022
你們可以請有什麼建議可能是錯的?
編輯:我可以chmod該文件給它我準備的權限。我很好奇爲什麼上述失敗。
將umask中的權限從模式參數關閉到open
和mkdir
(和creat
以及朋友,類似地)。例如,如果mode
參數指定爲:
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH
(0666)創建與0022典型的umask文件時,其結果將是
S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH
(0644)
所以,你是正確地看到寫入權限不會被賦予您正在創建的目錄。
你很可能一個的umask限制下運行
man umask
應該讓你在正確的軌道
你自己說的,你有022的umask,所以省略了寫權限;從科瑞手冊頁:
的有效權限由進程的umask以通常的方式修飾:創建文件的權限(模式&〜的umask)。
將umask與您在creat
調用中指定的文件許可權相結合,以這種方式file_perms & ~umask
獲得爲文件實際設置的權限位。 umask基本上指定哪些位不應該被設置,即使你請求它們被設置。
chmod
調用忽略umask。而且你的目錄權限在這裏是不相關的(好吧,不是完全不相關的,如果你沒有對創建文件目錄的寫入權限,它將完全失敗)。
感謝您的解釋:) –
@Ricko M:不客氣。一個建議的話......在接受答案之前,你應該等待一段時間。第一個給出中等正確答案的人並不總是給出最佳答案的人。我不是說我的更好。這是你要判斷的。但如果你在5分鐘內接受,你可能錯過了一個更好的答案。 – Omnifarious
注意點:)) –