Die Pipeline funktioniert folgendermaßen: Sie führt zuerst den ersten Befehl und dann in Ihrem Fall den zweiten Befehl aus.
Das heißt, lassen Sie uns A|Bden Befehl geben. Dann ist es ungewiss, ob Aoder ob Berst begonnen wird. Sie starten möglicherweise genau zur gleichen Zeit, wenn mehrere CPUs vorhanden sind. Eine Pipe kann eine undefinierte, aber begrenzte Datenmenge enthalten.
Wenn B versucht, aus der Pipe zu lesen, aber keine Daten verfügbar sind, Bwird gewartet, bis die Daten eingehen. Wenn Sie Bvon Beiner Festplatte gelesen haben , besteht möglicherweise dasselbe Problem und Sie müssen warten, bis der Lesevorgang für die Festplatte abgeschlossen ist . Eine nähere Analogie wäre das Lesen von einer Tastatur. Dort Bmüsste man warten, bis ein Benutzer eingibt. In all diesen Fällen hat B eine "Lese" -Operation gestartet und muss warten, bis sie beendet ist. Wenn Bjedoch ein Befehl so ist, dass er nur eine Teilausgabe benötigt, wird dieser Anach einem bestimmten Punkt, an dem der BEingangspegel erreicht ist A, von SIGPIPE beendet
Wenn Aversucht wird, in die Pipe zu schreiben, und die Pipe voll ist, Amuss abgewartet werden, bis etwas Platz in der Pipe frei wird. Akönnte das gleiche Problem haben, wenn es in ein Terminal schreibt. Ein Terminal verfügt über eine Flusskontrolle und kann das Datentempo verringern. In jedem Fall hat to Aeine "Schreib" -Operation gestartet und wartet, bis die Schreiboperation beendet ist.
Aund Bverhalten sich wie Co-Prozesse, obwohl nicht alle Co-Prozesse mit einer Pipe kommunizieren. Keiner hat die volle Kontrolle über den anderen.
-mArgument.