Освобождает ли Linux автоматически безымянный канал после закрытия обоих файловых дескрипторов?

Я использую безымянный канал для межпроцессного взаимодействия между родительским процессом и дочерним процессом, созданным с помощью fork (). Я использую функцию pipe (), включенную в unistd.h

. Я предполагаю, что после закрытия обоих файловых дескрипторов (и в обоих процессах) канал будет освобожден / освобожден / уничтожен / и т. Д. Но я не нашел ничего на страницах руководства, что бы об этом говорилось окончательно. Я делаю программу, которая будет работать очень долго, поэтому я хочу предотвратить утечки памяти и другие подобные вещи.

Тело моей функции выглядит примерно так:

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] );
}

Можно ли предположить, что после этой функции завершается как в дочернем, так и в родительском, что канал был освобожден / освобожден / уничтожен / и т. д. ?

Есть ли какая-либо документация, в которой это окончательно сказано?

Спасибо

5
задан pcd6623 8 December 2010 в 21:57
поделиться