Ich habe ein Skript, das in eine Named Pipe schreibt und ein anderes, das aus der Pipe liest. Gelegentlich habe ich beim Starten des Skripts festgestellt, dass der Inhalt der Pipe aus einer vorherigen Ausführung des Skripts besteht. Gibt es eine Möglichkeit, die Pipe am Anfang des Skripts auszuspülen?So spülen Sie eine Pipe mit bash
7
A
Antwort
5
Ich denke dd
ist dein Freund:
dd if=myfifo iflag=nonblock of=/dev/null
strace zeigt
open("myfifo", O_RDONLY|O_NONBLOCK)
und in der Tat auf eine leere Fifo nicht einmal blockieren.
1
Sie können von der Rohrleitung lesen, bis sie leer ist. Dadurch wird es effektiv gespült.
Bevor Sie dieses wagemutige Talent versuchen, rufen Sie fcntl(mypipe, F_SETFL, O_NONBLOCK)
(ich weiß nicht die Shell-Scripting Entsprechung), um einen Lesevorgang zu machen, wenn die Pipe leer ist nicht hängen Sie Ihr Programm.
1
Try this:
„Öffnen der FD Lese-/Schreib eher als schreibgeschützt, wenn die Pipeline Blockierung verhindert aufzubauen.“
aus:
Setting up pipelines reading from named pipes without blocking in bash
verwirrt, nicht bash ist es? –
Nicht im Sinne der Verwendung von bash-butin-Befehlen/-Features, sondern definitiv im Sinne einer Shell-Scripting-Lösung mit Standard-Unix-Tools. – mvds