Sortof, potok działa w ten sposób: najpierw wykonuje pierwsze polecenie, a następnie drugie polecenie w twoim przypadku.
Oznacza to, że A|B
otrzymamy polecenie. Wtedy nie ma pewności, czy A
lub B
zaczyna pierwszy. Mogą rozpocząć się dokładnie w tym samym czasie, jeśli jest wiele procesorów. Potok może przechowywać nieokreśloną, ale skończoną ilość danych.
Jeśli B spróbuje odczytać z potoku, ale żadne dane nie są dostępne, B
poczeka, aż dane dotrą. Jeśli B
odczytuje z dysku, B
może występować ten sam problem i trzeba poczekać, aż odczyt z dysku się zakończy. Dokładniejszą analogią byłoby czytanie z klawiatury. Tam B
musiałby czekać na wpisanie przez użytkownika. Ale we wszystkich tych przypadkach B rozpoczął operację „odczytu” i musi poczekać, aż zakończy. Ale jeśli B
jest to polecenie, które potrzebuje tylko częściowego wyjścia, A
to po pewnym punkcie, w którym B
osiągnięty jest poziom wejściowyA
zostanie zabity przez SIGPIPE
Jeśli A
spróbujesz pisać do potoku, a potok jest pełny, A
musisz poczekać , aż wolne miejsce w potoku stanie się wolne. A
mógłby mieć ten sam problem, gdyby zapisywał na terminalu. Terminal ma kontrolę przepływu i może moderować tempo danych. W każdym razie doA
, rozpoczął operację „zapisu” i zaczeka na zakończenie operacji zapisu.
A
i B
zachowują się jak koprocesy, chociaż nie wszystkie koprocesy będą komunikować się z potokiem. Żadna z nich nie ma pełnej kontroli nad drugą.
-m
argument.