我正在使用 open
系统调用创建一个具有完全权限 (777) 的文件,但是当我执行 ls -l
时,我只能看到权限为 (755) .您能告诉我为什么文件权限不是 777 吗?
代码
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
int main()
{
int fd;
/* Creates a file with full permission*/
fd = open("test", O_CREAT | O_RDWR | O_APPEND, 0777);
if (fd = -1)
{
return -1;
}
close(fd);
}
输出
$ ls -l
-rwxr-xr-x 1 ubuntu ubuntu 0 2012-09-19 11:55 test
最佳答案
系统维护了一个名为umask
的值;它是进程的一个属性,就像 PID(进程 ID)或 EUID(有效用户 ID)一样。它将被设置为 022
(八进制),表示系统应该从创建的文件中删除组和其他写入权限。
您可以调用umask(0);
在使用 open()
之前,这样您在 open()
中指定的模式将不会被更改。您当然应该这样做以证明 umask
是问题所在。然而,通常最好让用户选择 umask
占上风——如果程序不遵守我的 umask 设置,我会变得非常顽皮;在我发现并验证问题后,它往往不会再次使用。
shell 还有一个(内置)命令 umask
可以使用。 022
值是一个合理的默认值;大多数时候,您不希望任何人写入您的文件。
关于c - 为什么在 Linux 上使用 open 系统调用创建文件时会更改文件权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12489525/