我需要使用 Go 来获取给定文件的文件权限(特别是 SUID 位)。以下是示例文件的权限。
$ touch example_file.test
$ chmod 7777 example_file.test
$ ls -ltra example_file.test
-rwsrwsrwt 1 luke users 0 Feb 25 21:53 example_file.test
$ stat -c "%a %n" example_file.test
7777 example_file.test
这是一个说明问题的小程序。
func main() {
info, _ := os.Stat("example_file.test")
fmt.Println(info.Mode().String()) // ugtrwxrwxrwx
fmt.Println(info.Mode().Perm().String()) // -rwxrwxrwx
fmt.Printf("permissions: %#o\n", info.Mode().Perm()) // permissions: 0777
}
Go 结果不一致,因为ugtrwxrwxrwx != 0777.
文档中的以下引用表明这可能是一个跨平台兼容性问题。
FileMode 表示文件的模式和权限位。这些位在所有系统上都具有相同的定义,因此可以将有关文件的信息从一个系统移动到另一个系统。并非所有位都适用于所有系统。唯一需要的位是目录的 ModeDir。
type FileMode uint32 定义的文件模式位是 FileMode 的最高有效位。九个最低有效位是标准的 Unix rwxrwxrwx 权限。这些位的值应该被认为是公共 API 的一部分,并且可以用于有线协议或磁盘表示:它们不能更改,尽管可能会添加新的位。
这是 Go 的限制吗?
慕姐4208626
函数式编程
相关分类