next up previous contents
Next: D.4 Sporocila Up: D Komunikacija med procesi Previous: D.2 Signali Vsebina: contents

D.3 Cevi

Kot osnova in najstarejsi princip komunikacije so cevi (pipes), tudi najbolj uporabne v interaktivnem delu. Smer pretoka podatkov med dvema procesoma je le enosmeren (half-duplex). Procesi, ki med seboj komunicirajo, morajo imeti istega predhodnika. To je obicajno proces kreiran s funkcijo fork(). Pri interaktivnem delu vecina operacijskih sistemov pozna tudi cevi, ki delujejo med programi tako, da ukazni interpreter poveze standardni izhod stdout in standardni vhod stdin dveh programov. V operacijskem sistemu DOS, pa za razliko od UNIX-a, programa, ki si na ta nacin izmenjujeta podatke, ne teceta vzporedno. Programi kreirani s fork() ne delujejo na ta nacin, ampak je potrebno uporabiti funkcijo pipe(), ki uporablja opisnik (descriptor) ali princip navidezne datoteke s funkcijama popen() in pclose(). Slednji nacin je tudi enostavnejsi, saj je komunikacija z uporabo navidezne datoteke uporabna tudi pri testiranju in ucenju, ker lahko naredimo dva programa, ki klasicno komunicirata med seboj s pomocjo ukaznega interpreterja. Po uspesnem testu je ta dva programa enostavno zdruziti v en program, ki uporablja IPC s cevmi. Ob pravilni zgradbi programov je potrebno fp = stdin zamenjati z fp = popen("ukaz", "r").

Ce zelimo dvosmerno komunikacijo med procesoma, enostavno odpremo dve cevi, vsako v svojo smer. Interaktivno taka komunikacija ni mozna brez uporabe poimenovanih cevi (named pipe -- FIFO). V operacijskem sistemu naredimo tak komunikacijski kanal z ukazom mkfifo, ki postane oporna tocka dveh programov, ki na dogovorjenem mestu uporabita navidezno datoteko (FIFO) in jo uporabita za komunikacijo. FIFO je tako le vezna tocka med nepovezanimi programi. Operacije na datoteki FIFO so enake kot za navadne datoteke. Podoben nacin komunikacije obstaja v UNIX-u med jedrom operacijskega sistema in ostalimi programi z uporabo specialnih datotek, ki se nahajajo na podrocju /dev.



Copyright © 1995 Leon Kos, Univerza v Ljubljani