Mam następujący scenariusz.Czy musimy wyraźnie zamknąć koniec odczytu rury, której koniec zapisu został już zamknięty?
Tworzę fajkę.
Rozwidlony proces potomny.
Dziecko zamyka czytać koniec rury wyraźnie i pisze do końca zapisu rury i wyjść bez zamykania czegokolwiek (zjazd powinien zamknąć wszystkie otwarte deskryptory plików/rur w imieniu dziecka, jak sądzę).
nadrzędna zamyka koniec zapisu rury wyraźnie i odczytuje z odczytanego końca rury przy użyciu
fgets
do tejfgets
zwraca NULL. tj. czyta się całkowicie.
Teraz moje pytanie brzmi, dlaczego rodzic musi zamknąć koniec czytanego przewodu jawnie po zakończeniu czytania? Czy nie jest rozsądne, aby system całkowicie usunął rurę po przeczytaniu kompletnych danych z poziomu odczytu?
Dint zamykam wyraźnie koniec odczytu w rodzicu i wcześniej lub później mam błąd Too many file descriptors
podczas otwierania kolejnych potoków. Zakładam, że system automatycznie usuwa rurę po zamknięciu jej końca zapisu, a dane zostały całkowicie odczytane z końca odczytu. Bo nie możesz dwa razy z rury!
A zatem, jakie jest uzasadnienie, że system nie usuwa rury po całkowitym odczytaniu danych i zamknięciu zapisu?
"Bo nie możesz dwa razy polecieć!" ??? –
@KerrekSB Co miałem na myśli to, że możesz przeczytać tę samą rurkę dwa razy, ale zobaczysz EOF drugi raz, prawda? –