C中的文件创建权限
我正在使用以下代码在C中创建一个文件:C中的文件创建权限,c,file,file-permissions,C,File,File Permissions,我正在使用以下代码在C中创建一个文件: int outfd = open(arg,O_CREAT|O_TRUNC|O_WRONLY, f_per); f_per为文件权限号 将f_per设置为0644,执行代码并执行ls-l,可以将(输出)文件权限设置为-rw-r--。但是,将things设置为0777会将权限设置为-rwxr-x,而不是-rwxrwx。知道为什么会发生这种情况吗?根据,在O_create下: 。。。文件模式的访问权限位应设置为oflag参数后的参数值,oflag参数被视为类型
int outfd = open(arg,O_CREAT|O_TRUNC|O_WRONLY, f_per);
f_per
为文件权限号
将f_per
设置为0644
,执行代码并执行ls-l,可以将(输出)文件权限设置为-rw-r--
。但是,将things设置为0777会将权限设置为-rwxr-x
,而不是-rwxrwx
。知道为什么会发生这种情况吗?根据,在O_create
下:
。。。文件模式的访问权限位应设置为oflag参数后的参数值,oflag参数被视为类型mode\u t
,修改如下:按位对文件模式位和进程文件模式创建掩码补码中的相应位执行AND。
模式创建掩码(或umask)可以被视为减法掩码。例如,当文件模式创建掩码为----w-/0002
时,如果您尝试创建具有权限的文件rwxrwx/0777
,您将实际得到以下结果:
rwxrwxrwx
& rwxrwxr-x (complement of -------w-)
=========
rwxrwxr-x
这似乎就是您所遇到的情况
如果您想实际创建具有特定权限的文件,可以通过将umask设置为零(并在之后恢复),暂时禁用umask,如下所示:
mode_t oldmask = umask(0); // needs sys/stat.h
int outfd = open(arg, O_CREAT|O_TRUNC|O_WRONLY, 0777);
umask(oldmask);
如果您在POSIX上:
umask
?参见!我丢失了解除掩码。它到底有什么用?(对C语言不是很有经验)没有去掩码<代码>umask
。正如在《曼乌玛斯克》(man-umask)中一样,我明白了。谢谢