我的应用程序用于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,....);
}
}
Run Code Online (Sandbox Code Playgroud)
有人遇到类似的事吗?
总结:对于给定的fd,文件搜索和写入工作正常,并且在没有理由的情况下突然返回errno = 9.