我的应用程序用于lseek()
寻找所需的位置来写入数据。该文件已使用成功打开,并且open()
我的应用程序能够多次使用。lseek()
write()
在给定的时间,对于一些不容易重现的用户,lseek()
返回 -1,errno
值为 9。在此之前文件未关闭,文件句柄 (int) 未重置。
之后,创建另一个文件;open()
又好了,lseek()
又write()
可以工作了。
更糟糕的是,该用户再次尝试了完整的序列,一切都很好。
所以我的问题是,操作系统可以出于某种原因为我关闭文件句柄吗?什么可能导致这种情况?某种文件索引器或文件扫描仪?
解决这个问题的最佳方法是什么?这个伪代码是最好的解决方案吗?(不要介意代码布局,将为它创建函数)
int fd=open(...);
if (fd>-1) {
long result = lseek(fd,....);
if (result == -1 && errno==9) {
close(fd..); //make sure we try to close nicely
fd=open(...);
result = lseek(fd,....);
}
}
有人有类似的经历吗?
摘要:对于给定的 fd,文件查找和写入工作正常,并且突然无缘无故地返回 errno=9。