Стоит отметить, что в дополнение к восьмеричным восьмеричным представлениям не соответствуют строковые представления:
"-rwsrwsrwt" != "ugtrwxrwxrwx"`
Это не связано с ограничением реализации Go, а является следствием c.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 100 * * * * * * * *
* * * *1011* FileMode представляет файл биты режима и разрешения. Биты имеют одинаковое определение во всех системах, так что информация о файлах может переноситься из одной системы в другую переносимым образом. Не все биты применяются ко всем системам.
Поскольку реализация не предназначена для имитации c поведения определенной системы c, выходные данные не гарантированно соответствует родным инструментам в данной среде. Тем не менее, все соответствующие данные доступны для работы.
Если вы хотите имитировать c вывод stat
, вы можете просто написать несколько logi c для этого.
Вот небольшой пример восьмеричного представления:
package main
import (
"fmt"
"os"
)
func UnixPerm(m os.FileMode) (p uint32) {
p = uint32(m.Perm())
if m & os.ModeSetuid != 0 {
p |= 04000
}
if m & os.ModeSetgid != 0 {
p |= 02000
}
if m & os.ModeSticky != 0 {
p |= 01000
}
return p
}
func main() {
info, _ := os.Stat("example_file")
fmt.Printf("FileMode.Perm(): %04o\n", info.Mode().Perm())
fmt.Printf("UnixPerm(): %04o\n", UnixPerm(info.Mode()))
}
Вывод:
$ go run fileperm.go
FileMode.Perm(): 0777
UnixPerm(): 7777
$ stat --printf "Permissions: %a\n" example_file
Permissions: 7777