【问题标题】:UMASK function in CC语言中的UMASK函数
【发布时间】:2015-09-11 15:46:34
【问题描述】:
#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
void main()
{
    umask(0000);
    creat("a.txt",666);
}

我的预期输出是,使用名称“a.txt”创建的文件,权限为“rwrwrw”。但是,输出如下。

输出:

$ ls -l a.txt 
--w--wx-wT 1 mohanraj mohanraj 0 Sep 11 19:04 a.txt
$

umask 设置为 0。因此,我希望该文件是使用 666 的默认文件权限创建的。但是,它提供了一些其他输出。所以, umask 在内部是如何工作的。以及如何获得预期的结果。

【问题讨论】:

  • 在这里提问之前您阅读umask(2)了吗?
  • 我的一位同事在代码中使用了上面的示例,我想为了将来的读者的利益,我想提一下 umask(0000); 可以简化为 umask(0);

标签: c linux unix umask


【解决方案1】:

您指定的文件创建模式是十进制格式。文件创建模式通常以八进制指定,因此您应该在数字前加上前导 0,这告诉编译器它是一个八进制常量

creat("a.txt",0666);

十进制 666 = 八进制 1232,与你得到的结果相匹配。

请参阅您的友好手册页 (man 2 umask) 或 this one

【讨论】:

    【解决方案2】:

    --w--wx-wT

    1 * 512 + 2 * 64 + 3 * 8 + 2 = 666

    它完全符合您的要求。尝试改用0666

    【讨论】:

      猜你喜欢
      • 2011-10-12
      • 2016-08-19
      • 2015-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多