在编译一个开源软件的时候,在一处写文件的地方,发现总是权限有问题。
代码如下:
-----
fd = open(filename, O_WRONLY | O_CREAT | O_EXCL, 644)
-----
这么一看,好像没什么问题,
通过open创建一个文件,权限为644的。
网上有关于这个函数参数的介绍:
O_WRONLY 可读可写
O_CREAT 若此文件不存在,则创建它,用此选项的时候,需同时说明第三个参数mode
O_EXCL 如果同时指定了O_CREAT,则文件已经存在,则出错。这可测试一个文件是否存在,如果不存在则创建此文件成为一个原子操作。
mode为644.
按我们理解,644为wr* *r* *r*,
-----
那问题在哪里呢,
我们知道,通常用来表示权限的777,644这种的,实际是8进制的,
而如果我们直接写644,则c语言会当成10进制的数来处理,则会出问题。
8进制的644,需要前面加一个0,为0644
-----
:)