即使已定义,也没有写入权限

时间:2012-12-02 10:21:00

标签: c ubuntu-11.04

我想使用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)

但我仍然得到相同的结果。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

权限由进程'umask修改。有效权限为(mode & ~umask)

您应该在使用fchmod()创建文件后更改权限。如果您使用fchmod()并且基础文件已更改为指向chmod()open()之间的其他inode(Google for TOCTOU比赛),chmod()可以避免您可能遇到的竞争条件。