我正在创建一个文件,如下所示
int fd = creat(file_path.c_str() ,S_IRWXU|S_IRWXG|S_IRWXO);
虽然我向所有三个实体提供所有权限,但它会创建具有以下权限的文件。
-rwxr-xr-x
我创建此目录的目录的权限设置为
drwxrwxrwx
Umask
0022
你们可以建议可能出现的问题吗?
编辑:我可以chmod该文件,为其提供我计划的权限。我很好奇上面的原因是失败了。
答案 0 :(得分:4)
你自己说,你有一个022的umask,所以省略了写权限;来自creat手册页:
进程的umask以通常的方式修改有效权限:创建的文件的权限是(mode& ~umask)。
答案 1 :(得分:3)
您可能在umask限制下运行
man umask
应该让你走上正确的轨道
答案 2 :(得分:3)
umask与您在creat
调用中以此方式file_perms & ~umask
指定的文件权限相结合,以获得实际为文件设置的权限位。 umask基本上指定了即使您请求设置它们也不应设置哪些位。
chmod
调用忽略umask。你的目录权限在这里是无关紧要的(好吧,并非完全不相关,如果你没有对你正在创建文件的目录的写权限,它将完全失败。)
答案 3 :(得分:1)
umask中的权限从模式参数关闭到open
和mkdir
(以及creat
和朋友,类似)。例如,如果mode
参数指定为:
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH
(0666)创建典型umask为0022的文件时,结果为
S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH
(0644)
因此,您正确地看到没有为您正在创建的目录提供写访问权。