Czy można przekierować za dużo danych?

0

Pracuję na systemie Linux działającym na jądrze 3.2.0. Na tym systemie napisałem program, który ostatecznie wygeneruje około 50 GB danych, które następnie wyśle ​​na standardowe wyjście. To wyjście chcę przekierować do pliku.

Czy może dojść do przelewu rur? Czy rury działają niezawodnie, niezależnie od ilości danych?

Gregor
źródło
Moim zmartwieniem byłoby raczej to, jak obsługiwać plik 50 GB ...
cYrus
Pytanie już zadane i odpowiedzi: stackoverflow.com/questions/2715324/...
MariusMatutiae

Odpowiedzi:

5

Rury nie mogą się przelać. Rura to tylko bufor (pewna ilość pamięci, najprawdopodobniej 64 KB w bieżącym systemie) między producentem a konsumentem. Jeśli producent produkuje szybciej niż konsument konsumuje, jest on blokowany (co oznacza, że ​​program będzie spał), dopóki konsument nie zwolni miejsca w buforze, czytając z niego.

Poza tym opisany przypadek nie jest technicznie fajką. Jeśli mówimy o POSIX sh, przekierowanie do pliku ( acommand > afile) powoduje, że punkt wejścia polecenia jest bezpośrednio do pliku. Rura wiąże się z |postacią, przez przypadek nazywany również „rura”, i jest to połączenie między dwoma programami uruchomionymi: acommand | anothercommand.

(Ale z drugiej strony, to, co naprawdę dzieje się za kulisami, to inna historia: Na przykład w katalogu / dev znajduje się wiele plików pseudo urządzeń, które faktycznie przekierowują do uruchomionych procesów. Na przykład echo Hello World > /dev/pts/1mogą zapisywać do twojego obecnego Xterma)

Jo So
źródło