相关疑难解决方法(0)

lseek/write突然返回-1,errno = 9(错误的文件描述符)

我的应用程序用于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.

c file-io handle seek

5
推荐指数
2
解决办法
2万
查看次数

标签 统计

c ×1

file-io ×1

handle ×1

seek ×1