到底怎么回事...?Python C代码创建的文件的文件权限

Joe*_*Joe 2 c python distutils cpython

如果我有以下C代码:

int main(int argc, char **arg)
{
    int x = open("testfilefromc", O_RDWR | O_CREAT);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我编译和运行不合理时创建这个:

-rw-r-----   1 joewass  staff     0B 31 Jan 21:17 testfilefromc
Run Code Online (Sandbox Code Playgroud)

但是下面的C代码,编译成Python模块:

const char *filename = "testfilefrompython";
context->fd = open(filename, O_RDWR | O_CREAT);
Run Code Online (Sandbox Code Playgroud)

做这个:

----------   1 joewass  staff   165B 31 Jan 21:09 testfilefrompython
Run Code Online (Sandbox Code Playgroud)

毫不奇怪,创建该文件的代码无法在下一轮打开它!

为什么文件会以零权限创建?为什么在编译成Python模块的C中行为会有所不同?我正在运行运行代码的python程序.

为了它的价值,我mmap稍后会把这个文件写进去.

谢谢!

编辑:我知道我可以chmod解决这个问题,问题是为什么

编辑2:感谢Rosh Oxymoron指出我错过了不那么可选的可选参数.TRWTF是第一个可行的例子!

Ros*_*ron 6

该函数open有三个参数.如果指定了O_CREAT标志,则需要使用此签名调用它:

int open(const char *pathname, int flags, mode_t mode);
Run Code Online (Sandbox Code Playgroud)

否则行为未定义.在第一个示例中创建文件的可能性根本不大.另外,请查看umask哪个始终与您指定的模式进行AND运算.