lseek/write suddenly returns -1 with errno = 9 (Bad file descriptor)

Posted by Ger Teunis on Stack Overflow See other posts from Stack Overflow or by Ger Teunis
Published on 2010-03-30T12:01:12Z Indexed on 2010/03/30 12:03 UTC
Read the original article Hit count: 459

Filed under:
|
|
|

My application uses lseek to seek the desired position to write data. The file is opened using open() command successfully and my application was able to use lseek and wite lots of times.

At a given time, for some users and not easily reproducible the lseek returns -1 with an errno of 9. File is not closed before this and the filehandle (int) isn't reset.

After this an other file is created open is okay again and lseek and write works again. To make it even worse, this user tried the complete sequence again and all was well.

So my question is, can the OS close the file handle for me for some reason? What could cause this? A file indexer or file scanner of some sort?

What is the best way to solve this; is this pseudo code the best solution? (never mind the code layout, will create functions for it)

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,....);
  }
}

Anybody experience with something similar?

Summary: file seek and write works okay for a given fd and suddenly gives back errno=9 without a reason.

© Stack Overflow or respective owner

Related posts about c

    Related posts about file-io