在Linux上使用开放系统调用创建文件时,为什么更改文件权限?

我正在使用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设置,我会变得很固执。我发现并验证问题后,往往不会再使用它。

该外壳程序还具有一个(内置)命令umask,您可以使用该命令。该022值是明智的默认值;大多数时候,您不希望任何人都在写文件。

以上是 在Linux上使用开放系统调用创建文件时,为什么更改文件权限? 的全部内容, 来源链接: utcz.com/qa/402246.html

回到顶部