Pregunta

Al usar fdopen () , fileno () es posible abrir secuencias con descriptores de archivos existentes. Sin embargo, la forma correcta de cerrar un archivo, una vez que lo haya abierto con una secuencia es fclose () el puntero FILE . ¿Cómo se puede cerrar la secuencia pero conservar el descriptor de archivo abierto?

Este comportamiento es similar a llamar a fflush () y luego a fileno () , y luego nunca más usar el puntero FILE , excepto en clausura. Una preocupación adicional es que si vuelve a fdopen () , ahora hay múltiples punteros FILE , y solo puede cerrar uno de ellos.

¿Fue útil?

Solución

Si estás en un sistema POSIXy (como supongo que estás, ya que tienes fileno () ), puedes usar dup () para clonar el descriptor de archivo:

int newfd = dup(fileno(stream));
fclose(stream);

O puede entregar a fdopen () un descriptor de archivo duplicado:

FILE *stream = fdopen(dup(fd), "r");

De cualquier manera, la otra copia del fd no se cerrará con el FILE * . Sin embargo, tenga en cuenta que el puntero de ubicación está compartido, así que tenga cuidado si usa ambos al mismo tiempo. Además, todos los bloqueos fcntl () que se mantienen en el fem original se liberarán cuando cierre la copia.

Otros consejos

Si todo lo demás falla, dup (2) podría ayudar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top