我想使用open()创建一个文件。
以下是我的代码部分:
int fd = open("testing", O_EXCL | O_CREAT, S_IRWXU | S_IRWXG | S_IRWXO);
if(fd == -1){
perror("Error");
return 1; }
输出应该是一个名为“testing”的文件,具有对用户,组和其他人的读,写和执行权限。
但我得到的是一个名为“testing”的文件,具有此权限:
-rwxr-xr-x
缺少群组及其他人的写入权限。
我也尝试过使用
S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP | S_IXGRP | S_IROTH | S_IWOTH |S_IXOTH)
但我仍然得到相同的结果。
我该如何解决这个问题?
答案 0 :(得分:2)
权限由进程'umask修改。有效权限为(mode & ~umask)
。
您应该在使用fchmod()
创建文件后更改权限。如果您使用fchmod()
并且基础文件已更改为指向chmod()
和open()
之间的其他inode(Google for TOCTOU比赛),chmod()
可以避免您可能遇到的竞争条件。