系统调用“打开”模式不起作用

Mar*_*il4 2 filesystems c ubuntu

我正在编写一个关于打开带有O_CREAT | O_WDONLY | O_EXCL标志的文件的简单代码。代码如下所示:

int fd = open(fileName, O_WRONLY | O_CREAT | O_EXCL, 0777);
Run Code Online (Sandbox Code Playgroud)

除了模式(权限)部分外,它运行良好。我在其他部分放了什么,它总是创建一个带有r-x.

比如上面代码创建的文件的权限是这样的。

rwxrwxr-x.
Run Code Online (Sandbox Code Playgroud)

777不是吗?我错过了什么?

cxw*_*cxw 5

在位umask创建文件时,当前进程将被清除。在这种情况下,看起来 umask 是0002(无世界写入)。调用umask()之前调用open(),以改变这种状况。

Soapbox:请不要创建世界可写的文件,除非你真的确定这是你想要的。 umask存在是为了使您和您的用户免受此类漏洞的侵害。