2013-03-13 8 views
11

Ich versuche, in eine Named Pipe zu schreiben, mit mkfifo. Aber wenn ich den Befehl (ex) ls > myNamedPipe ausführe, kann ich keine Befehle mehr in die Bash eingeben. Ich kann immer noch Charaktere schreiben, und das ist so ziemlich alles.Kann nicht in Named Pipe schreiben

Antwort

18

Ein Named Pipe bleibt geöffnet, bis Sie es von einem anderen Ort lesen. Dies soll die Kommunikation zwischen verschiedenen Prozessen ermöglichen.

Versuchen:

mkfifo fifo 
echo "foo" > fifo 

Dann einen anderen Terminal öffnen und Typen:

cat fifo 

Wenn Sie Sie zuerst Terminal zurückkehren, werden Sie feststellen, dass Sie nun weitere Befehle eingeben können.

Siehe auch was mit der Rückseite happends:

# terminal 1 
cat fifo 

# terminal 2 
echo "foo" > fifo 

# and now you can see "foo" on terminal 1 

Wenn Sie Sie Terminal wollen nicht zu „hängen“, wenn sie versuchen, etwas zu dem Fifo zu schreiben, heften sich an die Fifo einen Dateideskriptor:

mkfifo fifo 
exec 3<> fifo 
echo "foo" > fifo 
echo "bar" > fifo 
+0

DANKE, das macht Sinn! Vielen Dank! – tay10r

+0

Danke - das funktioniert super! Kannst du mir erklären warum? Ich verstehe nicht ganz, wie die 'exec 3 <> fifo'-Zeile Dinge behebt. – Joost

+4

Wenn der Fifo an einen Dateideskriptor angehängt wird, puffert die Shell Daten, die in den FIFO geschrieben werden. Ohne es zu schreiben, schreibe in die Fifo-Blöcke, bis etwas liest, was geschrieben ist. Mit dem Dateideskriptor werden "foo" und "bar" durch die Shell gepuffert, und alles, was von diesem Dateideskriptor gelesen wird, kann sie später lesen. – chepner