2

I wondered if it was possible to release a FILE wrapper, without closing the underlying file descriptor:

void stream_function( int fd ) {
    FILE * stream = fdopen( fd, "r");
    // Read from stream with fread / fscanf
    // then close the buffered stream object with the mythical
    // xclose( stream ) function, leaving the fd intact. 
    xclose( stream );  
}


int main( ) {
   int fd = open("filename" , flags);
   stream_function( fd );
   // Continue to use fd
   close( fd );
}
melpomene
  • 84,125
  • 8
  • 85
  • 148
user422005
  • 1,989
  • 16
  • 34

1 Answers1

0

It's not. You can use dup2(fileno(f)) to keep a copy of the file descriptor, but fclose(f) inherently and always closes fileno(f).

In cases like yours where you're using fdopen to get the FILE * to begin with, however, you can dup2 the fd before passing it to fdopen. This protects the original fd from being closed at fclose time.

R.. GitHub STOP HELPING ICE
  • 208,859
  • 35
  • 376
  • 711