Unix/Linux下的open函数(O_CREAT和O_EXCL)
来源:互联网 发布:.us域名查询 编辑:程序博客网 时间:2024/06/05 04:45
今天想在Ubuntu上用open()实现检测文件是否存在,若存在就read()的功能,代码如下:
int fd=open(temp,O_RDONLY|O_CREAT|O_EXCL,S_IRWXU);
if(-1==fd)
return -2;
ssize_t nbytesRead = read(fd, buffer, count);
close(fd);
结果失败了,错误为“Bad file descriptor”。原因在于O_CREAT和O_RDONLY的矛盾,create的新文件还没写又怎么读呢?create需要写权限。
之所以想到用open()检测文件是否存在,因为在open()的参数描述中:
“O_EXCL 如果O_CREAT 也被设置,此指令会去检查文件是否存在。文件若不存在则建立该文件,否则将导致打开文件错误。此外,若O_CREAT与O_EXCL同时设置,并且欲打开的文件为符号连接,则会打开文件失败。”
我同时指定了O_EXCL和O_CREAT,实际的结果是:open()确实返回了-1(失败),但同时也创建了文件。这不是我想要的效果。
检测文件是否存在,我找到另一个函数替代:access(),只要包含<stdio.h>就可以了。
阅读全文
1 0
- Unix/Linux下的open函数(O_CREAT和O_EXCL)
- Unix/Linux下的open函数(O_CREAT和O_EXCL)
- Unix/Linux下的open函数(O_CREAT和O_EXCL)
- Unix/Linux下的open函数(O_CREAT和O_EXCL)
- open函数的O_CREAT与O_EXCL
- open系统调用的O_CREAT和O_EXCL
- O_CREAT | O_EXCL的作用
- O_CREAT O_EXCL
- 带着O_CREAT和O_RDWR进入linux系统调用open函数
- open函数中参数选项O_EXCL解析
- open函数中参数选项O_EXCL解析
- linux下open函数和creat函数
- O_RDWR, O_CREAT等open函数标志位在哪里定义?
- O_RDWR, O_CREAT等open函数标志位在哪里定义?
- 关于open操作的O_EXCL的存在应用价值理解
- open中O_EXCL选项的介绍与分析
- Linux/Unix下的man函数相关
- 浅谈Unix和Linux下的int
- TCP三次握手简析
- [2017纪中11-2]字典序 拓扑排序+优先队列
- Paper list of Imbalanced Time-series Classification with Deep Learning
- OpenCv中的cv::Mat::create()函数,cvRound(),cvFloor(),cvCeil()函数的详解l
- getch()和getchar()之再讨论
- Unix/Linux下的open函数(O_CREAT和O_EXCL)
- sql执行顺序
- adb常用命令
- springmvc 中自定义拦截器
- HTML5新增的标签
- 我的第一次java考试题目
- PHP MySQL 增查删改
- php实现哈希表
- Merge Two Sorted Lists