C

时间:2015-09-11 15:46:35

标签: c linux unix umask

#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
void main()
{
    umask(0000);
    creat("a.txt",666);
}

我的预期输出是,使用名称&#34; a.txt&#34;创建的文件;获得许可并且#34; rwrwrw&#34;。但是,输出如下。

输出:

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

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

2 个答案:

答案 0 :(得分:4)

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

creat("a.txt",0666);

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

答案 1 :(得分:1)

  

- W - WX-WT

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

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