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
11
A
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
DANKE, das macht Sinn! Vielen Dank! – tay10r
Danke - das funktioniert super! Kannst du mir erklären warum? Ich verstehe nicht ganz, wie die 'exec 3 <> fifo'-Zeile Dinge behebt. – Joost
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