int open(const char *pathname, int flags, ...);
|
[advanced programming in the unix environment]P.48 关于函数第二个参数对O_CREAT和O_EXCL的描述很有歧义
O_CREAT是说如果文件不存在就创建之 第三个参数mode指定访问权限 如0644(八进制) 如果文件存在就直接打开(第三个参数变成修改权限? 还是直接忽略了?)
一开始以为 O_EXCL必须和O_CREAT一起使用 否则没有作用 实际上O_EXCL本身就是用来测试文件是否存在的 如果文件不存在 则返回出错-1 文件存在则没反应 而当使用O_CREAT|O_EXCL的话则是相反的 如果文件不存在就创建文件 文件存在则返回出错
真是神奇的O_EXCL啊...
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
int main()
{
int open_description = 0;
if ((open_description = open("./testfile", O_RDWR|O_CREAT|O_EXCL, 0644))!=-1)
{
printf("open successful!\n");
close(open_description);
}
else
printf("open error!\n");
return 0;
}
|
第一次运行程序 创建文件 第二次运行 则返回error
如果if语句里改为O_RDWR|O_EXCL 则第一次就返回error
PS. 看书的心情
被一系列的事情打断 就不记得上次看书时 是什么心情了
阅读(1402) | 评论(1) | 转发(0) |