Võtame uuesti ette torude näite, sest see on päris huvipakkuv ning aitab ühtlasi paremini selgitada linkide olemust. Kui kasutate toru käsureal, loob shell
selle Teie eest ning talitab sellega nii, et enne toru antud käsk kirjutab sinna ja pärast toru antud käsk loeb sealt. Kõik torud, olgu nad siis anonüümsed (mida kasutab näiteks shell
) või nimega (vt. allpool), käituvad FIFO (esimesena sisse, esimesena välja) põhimõttel. Me vaatasime juba torude kasutamist shell
is, aga antud juhul ei tee paha seda korrata:
$ ls -d /proc/[0-9] | head -5 /proc/1/ /proc/2/ /proc/3/ /proc/4/ /proc/5/
Üks asi, mida Te antud näite korral ei märka (sest see juhtub liiga kiiresti, et seda oleks võimalik silmaga näha), on see, et torru kirjutamine on olemuselt blokeeriv. See tähendab, et kui käsk ls torru kirjutab, on see blokeeritud seni, kuni toru teises otsas olev protsess infot loeb. Selle efekti visualiseerimiseks tuleb Teil luua nimega torud, millel erinevalt torudest, mida kasutab shell
, on nimed (s.t. nad on erinevalt shell
i torudest lingitud)[5]. Nimega toru saab luua käsuga mkfifo:
$ mkfifo toruke $ ls -il total 0 169 prw-rw-r-- 1 queen queen 0 Aug 6 19:37 toruke| # # Te näete, et linkide arv on 1 ja et väljund näitab, # et fail on toru ('p'). # # Siin saab kasutada ka käsku ln: # $ ln toruke sama_toruke $ ls -il total 0 169 prw-rw-r-- 2 queen queen 0 Aug 6 19:37 toruke| 169 prw-rw-r-- 2 queen queen 0 Aug 6 19:37 sama_toruke| $ ls -d /proc/[0-9] >toruke # # Protsess on blokeeritud, sest teises otsas pole ühtegi lugejat. # Protsessi peatamiseks andke käsk Control Z... # [1]+ Stopped ls -F --show-control-chars --color=auto -d /proc/[0-9] >toruke # # ...Nüüd viige see taustale: # $ bg [1]+ ls -F --show-control-chars --color=auto -d /proc/[0-9] >toruke & # # nüüd lugege torust... # $ head -5 <sama_toruke # # ...kirjutamisprotsess lõpetab # /proc/1/ /proc/2/ /proc/3/ /proc/4/ /proc/5/ [1]+ Done ls -F --show-control-chars --color=auto -d /proc/[0-9] >toruke $
Ka lugemine on blokeeriv. Kui anda ülaltoodud käsud vastupidises järjekorras, näete, et head on blokeeritud, oodates, et mingi protsess annaks talle midagi, mida lugeda:
$ head -5 <toruke # # Programm on blokeeritud, peatage see käsuga C-z # [1]+ Stopped head -5 <toruke # # Viige see taustale... # $ bg [1]+ head -5 <toruke & # # ...Ja andke talle natuke toitu :) # $ ls -d /proc/[0-9] >sama_toruke /proc/1/ /proc/2/ /proc/3/ /proc/4/ /proc/5/ [1]+ Done head -5 <toruke $
Eelmises näites näete ka üht soovimatut efekti: käsk ls lõpetab enne seda, kui käsk head järje üle võtab. Selle tulemusena ilmub Teie ette kohe taas viip, käsk head aga käivitatakse hiljem ja Te näete alles pärast selle töö lõppu selle väljundit.
[5] Kaht tüüpi torude vahel on muidki erinevusi, aga nende tutvustamine väljub käesoleva käsiraamatu raamest.