5. Spetsiaalsed failid: sümbolseadmed ja plokkseadmed

Nagu märgitud, loob selliseid faile kas süsteem või Teie masina välisseadmed. Me mainisime ka seda, et plokkseadmefailid puhverdatakse, sümbolseadmefailid aga mitte. Selle selgitamiseks sisestage seadmesse diskett ja andke kaks korda järgmine käsk:

$ dd if=/dev/fd0 of=/dev/null

Te näete järgmist: esimesel korral loeti kogu disketi sisu. Kui Te andsite käsu teist korda, ei hakatud disketti enam üldse kasutama, sest selle sisu puhverdati juba siis, kui Te andsite käsu esimest korda — ja Te ei võtnud kahe käsu vahel disketiga midagi ette.

Nüüd aga oletame, et tahate lasta trükkida suurt faili sel moel (jah, see on tõesti võimalik):

$ cat /suur/fail/kuskil >/dev/lp0

Selle käsu täitmine võtab ühepalju aega sõltumata sellest, kas annate käsu ühe, kaks või viiskümmend korda. Põhjuseks on see, et /dev/lp0 on sümbolseade, mille sisu ei puhverdata.

Sellel, et plokkseadmed puhverdatakse, on üks vahva kõrvalmõju: ei puhverdata mitte ainult lugemisi, vaid ka kirjutamisi. See võimaldab kirjutada ketastele asünkroonselt: kui Te kettale kirjutate, ei võeta kirjutamist otsekohe ette. See sooritatakse alles siis, kui Linux otsustab ette võtta riistvarale kirjutamise. Teatud failisüsteemides saab sellise käitumise muidugi nullida: vaadake lähemalt võtmete sync ja async kirjeldust manuaalileheküljel mount(8) ning ka Sektsioon 7, “Failiatribuudid” .

Lisaks on igal spetsiaalsel failil oma põhinumber ja lisanumber. Käsu ls -l väljundis näidatakse neid suuruse asemel, sest selliste failide korral ei ole suurusel õieti ju tähendust:

$ ls -l /dev/hdc /dev/lp0 
brw-rw----  1 queen cdrom 22, 0 Feb 23 19:18 /dev/hdc
crw-rw----  1 root root 6, 0 Feb 23 19:17 /dev/lp0

Siin on /dev/hdc põhi- ja lisanumber vastavalt 22 ja 0, /dev/lp0 omad aga 6 ja 0. Pange tähele, et need numbrid on igal failikategoorial unikaalsed, mis tähendab, et olemas võib olla sümbolseade põhinumbriga 22 ja lisanumbriga 0 ning ka plokkseade põhinumbriga 6 ja lisanumbriga 0. Nende numbrite funktsiooniks on võimaldada kernelil seostada antud failidega (see tähendab, välisseadmetega, millele need failid viitavad) korrektsed operatsioonid: disketiseadet ei saa käsitleda samal moel nagu näiteks SCSI kõvaketast.