C: закрыть FILE* - не файловый дескриптор

Я задавался вопросом, можно ли выпустить FILE обертка, не закрывая основной файловый дескриптор:

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

1 ответ

Решение

Это не. Ты можешь использовать dup2(fileno(f)) сохранить копию дескриптора файла, но fclose(f) по своей сути и всегда закрывается fileno(f),

В таких случаях, как ваш, где вы используете fdopen чтобы получить FILE * для начала, однако, вы можете dup2 FD, прежде чем передать его fdopen, Это защищает оригинальный FD от закрытия в fclose время.

Другие вопросы по тегам