C &引用;创设;函数给出了错误的权限

C &引用;创设;函数给出了错误的权限,c,unix,permissions,file-permissions,C,Unix,Permissions,File Permissions,我的代码如下: #include "unistd.h" #include <fcntl.h> #define BSIZE 50 int main(int argc, char *argv[]) { int f1, f2; char buf[BSIZE]; f1 = open(argv[1], 0x0001, 0); f2 = creat(argv[2], 0777); read(f1, buf, BSIZE); write(f2

我的代码如下:

#include "unistd.h"
#include <fcntl.h>

#define BSIZE 50

int main(int argc, char *argv[]) {
    int f1, f2;
    char buf[BSIZE];

    f1 = open(argv[1], 0x0001, 0);
    f2 = creat(argv[2], 0777);

    read(f1, buf, BSIZE);
    write(f2, buf, BSIZE);

    return 0;
}
它创建了一个包含“a”内容的文件。但我的问题是,它的权限是
-rwxr-xr-x
。它不向组和其他人授予写入权限。此外,当我将函数更改为
create(argv[2],0022)时
然后权限将变为所有0
------------


create
功能有什么问题吗?因为
chmod
工作正常。

open
create
fopen
等创建的文件。使用默认的
umask
屏蔽模式位。您可能有一个
umask
022
,这是一个宽松的默认值。将
umask
更改为
0
将非常危险。正确的方法是显式使用
chmod
覆盖此默认值,并使您的文件可由组成员和其他人写入。

文件创建使用两种组合访问权限:

  • 您通过
    create
    open
  • 以及进程掩码,aka
    umask
  • umask
    通过屏蔽一些位来保护具有意外访问的创建文件,从而为程序用户提供一些最终控制。通常,
    umask
    等于
    022
    意味着组和其他组的写访问被删除,即用户不需要超过
    rwxr-xr-x

    然后,当您取回0777时,它会被
    ~umask
    掩蔽(和)在这里
    0755
    给予
    0755

    当你收回
    022
    时,你对“umask”的解释很好地满足了我的问题。非常感谢。
    ./a.out a b