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是第一个可行的例子!
该函数open有三个参数.如果指定了O_CREAT标志,则需要使用此签名调用它:
int open(const char *pathname, int flags, mode_t mode);
Run Code Online (Sandbox Code Playgroud)
否则行为未定义.在第一个示例中创建文件的可能性根本不大.另外,请查看umask哪个始终与您指定的模式进行AND运算.
| 归档时间: |
|
| 查看次数: |
186 次 |
| 最近记录: |