Unix/Linux下的open函数(O_CREAT和O_EXCL)

名人名言:有人问:写一首好诗,是靠天才呢?还是靠艺术?我的看法是:苦学而没有丰富的天才,有天才而没有训练,都归无用;两者应该相互为用,相互结合。——亚里士多德 

  今天想在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>就可以了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值