2011-05-13 74 views
1

我創建一個文件,如下所示奇怪的行爲創造

int fd = creat(file_path.c_str() ,S_IRWXU|S_IRWXG|S_IRWXO); 

雖然我提供的所有權限給所有三個實體,它將創建一個具有以下權限的文件。

-rwxr-xr-x 

我創建這個目錄中有權限設置爲

drwxrwxrwx 

的umask

0022 

你們可以請有什麼建議可能是錯的?

編輯:我可以chmod該文件給它我準備的權限。我很好奇爲什麼上述失敗。

回答

1

將umask中的權限從模式參數關閉到openmkdir(和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)

所以,你是正確地看到寫入權限不會被賦予您正在創建的目錄。

3

你很可能一個的umask限制下運行

man umask 

應該讓你在正確的軌道

4

你自己說的,你有022的umask,所以省略了寫權限;從科瑞手冊頁:

的有效權限由進程的umask以通常的方式修飾:創建文件的權限(模式&〜的umask)。

3

將umask與您在creat調用中指定的文件許可權相結合,以這種方式file_perms & ~umask獲得爲文件實際設置的權限位。 umask基本上指定哪些位不應該被設置,即使你請求它們被設置。

chmod調用忽略umask。而且你的目錄權限在這裏是不相關的(好吧,不是完全不相關的,如果你沒有對創建文件目錄的寫入權限,它將完全失敗)。

+0

感謝您的解釋:) –

+2

@Ricko M:不客氣。一個建議的話......在接受答案之前,你應該等待一段時間。第一個給出中等正確答案的人並不總是給出最佳答案的人。我不是說我的更好。這是你要判斷的。但如果你在5分鐘內接受,你可能錯過了一個更好的答案。 – Omnifarious

+0

注意點:)) –