Utilizzando fdopen()
, fileno()
è possibile aprire flussi con descrittori di file esistenti. Tuttavia, il modo corretto per chiudere un file, dopo averlo aperto con un flusso è fclose()
il puntatore FILE
. Come si può chiudere lo stream, ma mantenere il descrittore di file aperto?Chiudere un puntatore FILE senza chiudere il descrittore di file sottostante
Questo comportamento è simile a chiamare fflush()
e poi fileno()
, e quindi non utilizzare nuovamente il puntatore FILE
, tranne che in chiusura. Un'ulteriore preoccupazione è che se si è quindi fdopen()
di nuovo, ora ci sono più puntatori FILE
e si può solo chiudere uno di loro.
windows e altre piattaforme supportano fileno()! Non posso credere di non aver pensato a questa dup() soluzione, molto elegante e ovvia –
Non hai nemmeno bisogno di dup2() il nuovo file fd al fd originale e poi close() il nuovo file fd quindi tutto è tornato come prima, ad eccezione del flusso di file chiuso? : D Il che significa che hai bisogno di oldfd = fileno (stream) prima di fclose(). –
Jonathan, il doing do è audace nelle applicazioni multithread. È meglio 'dup' prima di dare il comando fd a' fdopen' in modo da poter essere sicuri che non tocchi mai il tuo originale. – bdonlan