Нужно ли явно закрывать конец чтения канала, конец которого для записи уже закрыт?

У меня есть следующий сценарий.

  1. Я создаю трубу.

  2. Разветвил дочерний процесс.

  3. Ребенок закрывает конец канала для чтения явно и записывает в конец канала для записи и выходит, ничего не закрывая (выход должен закрыть все открытые дескрипторы файлов/каналов от имени ребенка, я полагаю ).

  4. Parent закрывает конец записи канала явным образом и читает из конца канала чтения, используя fgets, пока fgetsне вернет NULL. т.е. читается полностью.

Теперь мой вопрос: почему родитель должен явно закрывать конец канала для чтения после завершения чтения? Разве не разумно для системы полностью удалить канал после того, как полные данные будут прочитаны с конца чтения -?

Я не закрываю конец чтения явно в родительском элементе, и рано или поздно у меня возникает ошибка Too many file descriptorsпри открытии большего количества каналов. Мое предположение состояло в том, что система автоматически удаляет канал, как только его конец записи закрыт, а данные полностью прочитаны из конца чтения. Потому что вы не можете из трубы дважды!

Итак, в чем причина того, что система не удаляет канал после того, как данные были полностью прочитаны, а конец записи закрыт?

10
задан Pavan Manjunath 6 August 2012 в 10:24
поделиться