Tengo este escenario siguiente.¿Necesitamos cerrar el extremo de lectura de una tubería explícitamente cuyo final de escritura ya se ha cerrado?
Creo una tubería.
Bifurcó un proceso de niño.
niño cierra leer extremo de la tubería de manera explícita y escribe en el extremo de escritura de la tubería y salidas sin cerrar nada (salida debe cerrar todos los descriptores de archivo/tuberías abiertas en nombre del niño, supongo).
Padres cierra el extremo de escritura de la tubería de manera explícita y lee desde la lectura final de la tubería usando
fgets
hastafgets
devuelve null. es decir, lee completamente.
Ahora mi pregunta es, ¿por qué el padre tiene que cerrar el extremo de lectura de la tubería explícitamente una vez que ha terminado de leer? ¿No es prudente que el sistema elimine el conducto por completo una vez que se han leído los datos completos desde el extremo de lectura?
No cierre el extremo de lectura explícitamente en el elemento primario y tarde o temprano tengo Too many file descriptors
error mientras abro más tuberías. Mi suposición era que el sistema elimina automáticamente una tubería una vez que su final de escritura se cierra y los datos han sido completamente leídos desde el final de lectura. Porque no puedes de una pipa dos veces!
Entonces, ¿cuál es la razón detrás del sistema que no elimina la tubería una vez que los datos han sido completamente leídos y cerrados?
"¡Porque no puedes cantar dos veces!" ??? –
@KerrekSB Lo que quise decir es que puede leer la misma tubería dos veces pero verá EOF por segunda vez, ¿verdad? –