C 中的 UMASK 函数
UMASK function in C
#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 内部是如何工作的。以及如何获得预期结果。
您指定的文件创建模式是十进制格式。文件创建模式通常以八进制指定,因此您应该在数字前加上前导 0,这告诉编译器它是一个八进制常量。
creat("a.txt",0666);
十进制666 = 八进制1232,与你得到的结果一致
请参阅友好的手册页 (man 2 umask
) 或 this one。
--w--wx-wT
1 * 512 + 2 * 64 + 3 * 8 + 2 = 666
它完全按照你的要求做了。请尝试使用 0666
。
#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 内部是如何工作的。以及如何获得预期结果。
您指定的文件创建模式是十进制格式。文件创建模式通常以八进制指定,因此您应该在数字前加上前导 0,这告诉编译器它是一个八进制常量。
creat("a.txt",0666);
十进制666 = 八进制1232,与你得到的结果一致
请参阅友好的手册页 (man 2 umask
) 或 this one。
--w--wx-wT
1 * 512 + 2 * 64 + 3 * 8 + 2 = 666
它完全按照你的要求做了。请尝试使用 0666
。