Jeden z nejlepších příkladů praktického použití pojmenovaného potrubí...
Z http://en.wikipedia.org/wiki/Netcat:
Dalším užitečným chováním je použití
netcat
jako zástupce. Přesměrovat lze porty i hostitele. Podívejte se na tento příklad:nc -l 12345 | nc www.google.com 80
Port 12345 představuje požadavek.
Tím se spustí
nc
server na portu 12345 a všechna připojení budou přesměrována nagoogle.com:80
. Pokud webový prohlížeč odešle požadavek nanc
, požadavek bude odeslán společnosti Google, ale odpověď nebude odeslána webovému prohlížeči. Je to proto, že potrubí je jednosměrné. To lze obejít pomocí pojmenovaného kanálu k přesměrování vstupu a výstupu.mkfifo backpipe nc -l 12345 0<backpipe | nc www.google.com 80 1>backpipe
Zde jsou příkazy:
$ mkfifo named_pipe
$ echo "Hi" > named_pipe &
$ cat named_pipe
První příkaz vytvoří roura.
Druhý příkaz zapisuje do roury (blokování). &
zařadí to na pozadí, takže můžete pokračovat v psaní příkazů ve stejném shellu. Ukončí se, když se FIFO vyprázdní dalším příkazem.
Poslední příkaz čte z roury.
Otevřete dvě různé skořápky a nechte je vedle sebe. V obou případech přejděte na /tmp/
adresář:
cd /tmp/
V prvním zadejte:
mkfifo myPipe
echo "IPC_example_between_two_shells">myPipe
Ve druhém zadejte:
while read line; do echo "What has been passed through the pipe is ${line}"; done<myPipe
První shell vám nevrátí žádnou výzvu, dokud nespustíte druhou část kódu ve druhém shellu. Je to proto, že čtení a zápis fifo blokuje.
Můžete se také podívat na typ FIFO provedením ls -al myPipe
a podívejte se na podrobnosti o tomto konkrétním typu souboru.
Dalším krokem by bylo vložit kód do skriptu!