2013-03-13 12 views
11

Próbuję napisać do nazwanego potoku, wykonanego przy użyciu mkfifo. Ale kiedy uruchomię polecenie (ex) ls > myNamedPipe, nie mogę już wprowadzać poleceń do bash. Wciąż mogę pisać postacie i to prawie wszystko.Nie mogę napisać do nazwanego potoku

Odpowiedz

18

Nazwana rura pozostaje otwarta, dopóki nie przeczyta się jej z innego miejsca. Ma to na celu umożliwienie komunikacji między różnymi procesami.

Spróbuj:

mkfifo fifo 
echo "foo" > fifo 

Następnie otworzyć kolejny terminal i wpisz:

cat fifo 

Jeśli powróci do was pierwszy terminal, można zauważyć, że można teraz wprowadzić inne polecenia.

Zobacz również co happends z rewersu:

# terminal 1 
cat fifo 

# terminal 2 
echo "foo" > fifo 

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

Jeśli chcesz, terminal nie do „powiesić na” kiedy próbuje napisać coś do FIFO, dołączyć do FIFO deskryptor pliku:

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

DZIĘKUJEMY, że ma to sens! wielkie dzięki! – tay10r

+0

Dzięki - działa to świetnie! Czy możesz mi wyjaśnić dlaczego? Nie bardzo rozumiem, w jaki sposób linia 'exec 3 <> fifo' naprawia pewne rzeczy. – Joost

+4

Dołączenie fifo do deskryptora pliku powoduje, że powłoka buforuje dane zapisane do fifo. Bez tego, każdy pisze do bloków fifo, dopóki coś nie przeczyta tego, co jest napisane. Z deskryptorem pliku "foo" i "bar" są buforowane przez powłokę, a wszystko, co czyta z tego deskryptora pliku, może je później odczytać. – chepner

Powiązane problemy