Estoy utilizando un conducto sin nombre para la comunicación entre procesos entre un proceso principal y un proceso hijo creado a través de fork(). Estoy usando la función pipe() incluida en unistd.h¿Linux libera automáticamente un conducto sin nombre una vez que se han cerrado ambos descriptores de archivo?
Supongo que una vez que ambos descriptores de archivos se han cerrado (y en ambos procesos), que la tubería se desasigna/libera/destruye/etc. Pero no he encontrado nada en las páginas man que diga esto definitivamente. Estoy haciendo un programa que se ejecutará durante mucho tiempo, por lo que quiero evitar fugas de memoria y otras cosas de esa naturaleza.
Mi cuerpo de la función se ve algo como:
int pipefds[2];
pipe(pipefds);
if (fork() == 0) {
close(pipefds[1]);
...
//Use pipefds[0]
close(pipefds[0]);
} else {
close(pipefds[0]);
...
//Use pipefds[1]
close(pipefds[1]);
}
¿Es seguro asumir que después de esta función termina en el niño y el padre que el tubo ha sido desasignado/liberado/destruido/etc. ?
¿Hay alguna documentación que diga esto definitivamente?
Gracias
¡Gracias! Tanto su respuesta como la respuesta de Steve Jossop fueron buenas, pero acepté la respuesta de Steve Jessop porque proporcionaba documentación de una fuente confiable y la documentación menciona explícitamente las canalizaciones. – pcd6623