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
время.