2010-07-27 4 views
7

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

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.

+0

verwirrt, nicht bash ist es? –

+0

Nicht im Sinne der Verwendung von bash-butin-Befehlen/-Features, sondern definitiv im Sinne einer Shell-Scripting-Lösung mit Standard-Unix-Tools. – mvds

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.