我有一個output/目錄。當要創建的目錄是
prefix := "output/2021-11-12.19.51.50.047614/2011-12"
os.MkdirAll(prefix, 0644)失敗。幾時
prefix := "output/2021-11-12.19.51.50.047614"
有用。
為什么不能os.MkdirAll()創建嵌套目錄?這就是它的目的。這是一個錯誤嗎?
uj5u.com熱心網友回復:
的mode引數os.MkdirAll 必須包含一些可執行 ( 111) 位。
一般來說,至少在類 Unix 系統上, 的mode引數os.MkdirAll 應該是 0777。在某些情況下,它應該是0700。(出于同樣的原因,新創建的檔案應該使用0666,而不是0644; 有時0600是合適的。)
Go 運行時將模式傳遞給作業系統級呼叫。在類 Unix 系統上,權限實際上是有意義的,1然后通過清除當前umask設定中設定的任何位來修改您提供的位。正是這個 umask 應該帶走組和其他寫權限,從而產生最終的0755權限——除非,也就是說,用戶想要帶走更多的權限(比如,0750或0700)或更少(導致,比如,0775)。
請記住,三組三位代表讀取 ( r)、寫入 ( w) 和執行 ( x) 權限:7is rwx、6is rw-、5isr-x等等。所以0777代表rwxrwxrwx.
類 Unix 系統需要執行權限來命名目錄中的檔案,因此如果您不給自己執行權限,您將無法再使用該目錄。
1在具有 ACL 的系統上,用戶權限是有意義的,“其他”作為默認值可能是合理的,但“組”定義不明確。不過,確實提供 ACL 的系統通常比簡單rwx控制元件具有更精細的粒度。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/358302.html
標籤:走
上一篇:通過使用scanner.Scan()從檔案中讀取資料來同步可組合goroutine的問題
下一篇:Go中帶緩沖通道的死鎖
