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
以及进程掩码,akaumask
umask
通过屏蔽一些位来保护具有意外访问的创建文件,从而为程序用户提供一些最终控制。通常,umask
等于022
意味着组和其他组的写访问被删除,即用户不需要超过rwxr-xr-x
然后,当您取回0777时,它会被~umask
掩蔽(和)在这里0755
给予0755
。
当你收回022
时,你对“umask”的解释很好地满足了我的问题。非常感谢。
./a.out a b