1

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

缺少 Group 和 Others 的写入权限。

我也尝试过使用

S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP | S_IXGRP | S_IROTH | S_IWOTH |S_IXOTH)

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

我怎么解决这个问题?

4

1 回答 1

2

权限由进程的 umask 修改。有效权限是(mode & ~umask).

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

于 2012-12-02T10:24:38.827 回答