今天想在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>就可以了。
本文详细介绍了在Ubuntu环境下使用open()函数检测文件是否存在时,同时使用O_EXCL和O_CREAT选项导致的错误及解决方法。通过使用access()函数替代open()函数检测文件的存在性,避免了错误的发生。
745

被折叠的 条评论
为什么被折叠?



