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

Dhy*_*yan 0 c 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);
}
Run Code Online (Sandbox Code Playgroud)

产量

     $ ls -l
    -rwxr-xr-x 1 ubuntu ubuntu    0 2012-09-19 11:55 test
Run Code Online (Sandbox Code Playgroud)

Jon*_*ler 5

系统维护的值称为umask; 它是进程的属性,就像PID(进程ID)或EUID(有效用户ID)一样.它将被设置为022(八进制),这表示系统应该从创建的文件中删除组和其他写入权限.

您可以umask(0);在使用前调用,open()以便open()不会更改您指定的模式.你当然应该这样做来证明这umask是问题所在.但是,通常最好让用户选择umask占上风 - 如果一个程序不遵守我的umask设置,我会变得非常邋;; 在发现并验证问题后,它往往不会再次使用.

shell还有一个(内置)命令umask,您可以使用它.该022值是合理的默认值; 大多数情况下,您不希望任何人写入您的文件.