为什么 C 程序中的 umask 没有按预期工作

为什么 C 程序中的 umask 没有按预期工作

我有以下来自 apue 书的代码:

#define RWRWRW (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)

int
main()
{
    umask(0);
    if(creat("foo",RWRWRW)<0)
        err_sys("creat error for foo");
    umask(S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
    if(creat("bar",RWRWRW)<0)
        err_sys("create error for bar");
    exit(0);
}

在 中terminal,我首先umask获取当前模式创建:我得到 0002。然后运行此程序。我得到以下内容:

$ ls -l foo bar
-rwxrwxrwx. 1 root root 0 May 15 14:28 bar
-rwxrwxrwx. 1 root root 0 May 15 14:28 foo

但它应该是这样的:

$ ls -l foo bar
-rw------- 1 sar 0 Dec 7 21:20 bar 
-rw-rw-rw- 1 sar 0 Dec 7 21:20 foo

那么到底发生了什么?为什么我的程序中的 umask 不起作用?

相关内容