关于open函数,一个很容易出错的问题
2017-06-09 16:16
218 查看
在编译一个开源软件的时候,在一处写文件的地方,发现总是权限有问题。
代码如下:
-----
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
-----
:)
代码如下:
-----
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
-----
:)
相关文章推荐
- 关于在eclipse中运行出错的一个小问题 Unknown column 'android' in 'where clause'
- 一个关于输入流出错的问题
- 一个关于stm32的systick配置出错的小问题
- 一个关于指针的问题,问题很简单,但容易出错,希望大家提出好的解决方法~~~
- 关于tomcate的配置出错的一个问题解决方法
- 关于iBatis配置xml文件时出现中文注释出错的一个问题(很坑爹.)
- 关于xampp安装时mysql出错的一个问题
- 学习Java的第一步是安装好JDK,写一个Hello World, 其实JDK的学习没有那么简单,关于JDK有两个问题是很容易一直困扰Java程序员的地方:一个是CLASSPATH的问题,其实从原理上来说,是要搞清楚JRE的ClassLoader是如何加
- 关于CreateService的一个大问题:权限问题
- [unix c]关于FOLK和PRINTF()的一个小问题
- 一个关于bin目录下DLL动态编译的问题
- java 中关于package的一个问题
- 关于Delphi下子类调用父类虚函数的一个问题
- DataGuard - 一个关于Physical Standby中recover问题的解决方法
- DataGuard - 一个关于Physical Standby中recover问题的解决方法
- 关于数据库备份的一个问题??
- 关于SQL的存储过程一个悬而未决的老问题
- 一个我很长时间才解决的关于xp与2000共享的网络问题
- 发现一个奇怪的问题,关于文件名
- 请教一个关于WEBFORM 调用外部EXE程序的问题