幾個星期前我做了一個小項目,但最近不知何故(或者至少不像之前的工作)。什麼是創建文件時的`open()`默認權限?
它必須創建一個文件open()
,並填充一些內容。
[...]
int fd=open(filename, O_RDWR | O_CREAT);
/* write content */
close(fd);
[...]
的問題只是,它最近沒有再創建一個具有正確的權限的文件(它與0110
創建時,這個問題是存在的)
我現在知道,我只需要指定權限是這樣的:
int fd=open(filename, O_RDWR | O_CREAT, 0700); /* (for instance) */
但該項目仍然工作在某些計算機(沒有在OSX上工作,但在Linux上,它與0640
創建沒有工作,所以它仍然工作,因爲我仍然有閱讀許可) 。
因此,這裏是我的問題:
- 如何被那些默認權限
open()
功能,在文件創建定義?
(如果我沒有明確它傳遞給我的電話open()
作爲參數。)
你的手冊頁告訴你什麼? – Jens
「[在標誌中指定'O_CREAT'時,必須提供''mode']參數*。 (強調我的)這使得它聽起來像是不確定的行爲,而當我忽略它時('--wS - S - T'),我確實會變成垃圾。 – ikegami
@ikegami而這種未定義的行爲可能會導致類似[this](http://stackoverflow.com/q/2245193/6850771)。 –