2014-04-04 58 views
1

mkdir函數具有參數模式的默認值0777爲什麼mkdir模式參數從0開始?

bool mkdir (string $pathname [, int $mode = 0777 [, bool $recursive = false [, resource $context ]]]) 

的mkdir我見過的每一個例子,有模式參數開頭的0.不領先的八進制數字表示文件的類型?

this page,0表示常規文件,而3表示目錄。

因此,mkdir中的模式參數的默認值不應該是3777而不是0777

這兩種模式與mkdir有什麼區別。如果我正在創建常規文件夾,我應該使用哪種模式值?

+2

整件事被稱爲「模式」。八進制規範中最左邊的數字是「sticky bit」,「setuid」或「setuid」http://en.wikipedia.org/wiki/Chmod#Octal_modes注意,這不是特定於'mkdir() ',而是所有類Unix的文件權限。 –

+0

另請參見http://en.wikipedia.org/wiki/Setuid –

回答

1

根據你問的對象,你可能會得到一些相當混亂的信息。您使用chmod,mkdir,touch和其他創建和修改文件權限的工具指定的模式往往只處理低位權限位,有時還會處理粘性和設置[ug] id位。模式的較高階部分(ls -lstat輸出但不常見)包括文件類型。

最右邊的9位全部被權限佔用,接下來的幾位與sticky,setuid和segid位有關。注意:

bin(0777) => '0b111111111' # 9 bits, all read, write, exec 
bin(01777) => '0b1111111111' # 10 bits, sticky + 0777 
bin(02777) => '0b10111111111' # 11 bits, setgid + 0777 
bin(04777) => '0b100111111111' # 12 bits, setuid + 0777 

所以這篇文章有點混亂,因爲沒有空間讓文件類型適合前12位。

在這個問題上你似乎很清楚,但對於後代來說,領先的0就是將該值標識爲八進制。所以,即使你想指定一個文件類型,你也必須從03…開始。

在任何情況下,mkdir將打造一個目錄或沒有任何東西。它不會生成文件,所以它不關心文件類型位。

+0

**前導0是將值標識爲八進制**。不知道這件事。謝謝。 – someone

+0

@ShreyansPagariya哦,是的,出於某種原因,我認爲你根據你的問題了解了這一點。 – kojiro

相關問題