【问题标题】:Are ioutil.WriteFile file mode / permission constants stored anywhere? [duplicate]ioutil.WriteFile 文件模式/权限常量是否存储在任何地方? [复制]
【发布时间】:2020-08-24 05:24:27
【问题描述】:

我在关注this simple go web app 教程,遇到了这个方法:

func (p *Page) save() error {
    filename := p.Title + ".txt"
    return ioutil.WriteFile(filename, p.Body, 0600)
}

关于值0600 它说:

作为第三个参数传递给 WriteFile 的八进制整数文字 0600 表示创建文件时应仅对当前用户具有读写权限。 (有关详细信息,请参阅 Unix 手册页 open(2)。)

这些值是否存储在任何地方,可能在osioutil 包中作为某种具有有意义名称的常量/枚举类型值?还是希望我们记住每个值的含义(或实现我们自己的命名常量)?

【问题讨论】:

    标签: go


    【解决方案1】:

    这些是 unix 文件系统权限的标准值。

    三位数字对应:

    • 所有者
    • 其他(又名:所有人)

    各个值由以下位或一起组成:

    • 1:执行
    • 2:写
    • 4:读取

    0600 示例中,我们有:

    • 0:表示八进制表示
    • 6: write | read 用户
    • 0: 群里什么都没有
    • 0: 其他什么都没有

    更多关于wikipedia

    【讨论】:

    • 我不确定它们是否在代码中被枚举,它们在技术上不需要,只是传递给系统调用。
    • 您需要 3^7 个常量 = 2187 个常量来描述所有值(不包括特殊模式)。我无法想象许多常量会比使用 uint32 更容易。
    • 我不认为他在询问所有可能的组合,只是个别位。
    • @Bassie:ReadWrite0600 不同。 0600 会更像 UserReadWriteGroupNoneOthersNone
    • @Bassie:正如我刚才解释的,有 2187 种 常规 模式(加上一些特殊模式)。所以,是的,有太多太多了,没有一个合理大小的枚举。
    猜你喜欢
    • 2011-11-22
    • 1970-01-01
    • 2021-07-28
    • 2022-08-09
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    相关资源
    最近更新 更多