到底是什么。。。?pythonccod创建的文件的文件权限

2024-10-01 17:41:16 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我有以下C代码:

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

当我编译和运行时,它会产生这样的结果:

^{pr2}$

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

const char *filename = "testfilefrompython";
context->fd = open(filename, O_RDWR | O_CREAT);

这样做:

----------   1 joewass  staff   165B 31 Jan 21:09 testfilefrompython

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

究竟为什么要以零权限创建文件?为什么在编译成Python模块的C语言中这种行为会有所不同呢?我正在运行python程序,它以我的身份运行代码。在

为了它的价值,我稍后将mmap处理该文件。在

谢谢!在

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

编辑2:感谢Rosh Oxymoron指出我错过了非可选的可选参数。TRWTF第一个例子真的起作用了吗!在


Tags: 模块文件代码编辑mainargopenfilename
1条回答
网友
1楼 · 发布于 2024-10-01 17:41:16

函数open有三个参数。如果指定O_CREAT标志,则需要使用以下签名调用它:

int open(const char *pathname, int flags, mode_t mode);

否则行为是未定义的。第一个示例中的文件创建根本不可能工作。还要看一下umask,它总是与您指定的模式进行“与”运算。在

相关问题 更多 >

    热门问题