我正在使用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)
系统维护的值称为umask; 它是进程的属性,就像PID(进程ID)或EUID(有效用户ID)一样.它将被设置为022(八进制),这表示系统应该从创建的文件中删除组和其他写入权限.
您可以umask(0);在使用前调用,open()以便open()不会更改您指定的模式.你当然应该这样做来证明这umask是问题所在.但是,通常最好让用户选择umask占上风 - 如果一个程序不遵守我的umask设置,我会变得非常邋;; 在发现并验证问题后,它往往不会再次使用.
shell还有一个(内置)命令umask,您可以使用它.该022值是合理的默认值; 大多数情况下,您不希望任何人写入您的文件.