Medprocesna komunikacija (sprotna naloga)
V sklopu te naloge demonstrirajte uporabo metod za medprocesno komunikacijo. Pripravite 3 programe, ki izvedejo v nadaljevanju opisane naloge. Pripravite tudi Makefile, ki bo vašo kodo prevedel v izvedljive programe.
Posamezni naslovi podnalog v nadaljevanu so sestavljeni iz pričakovanega imena programa in pričakovanega imena izvorne zbirke. Na sistem oddajte .zip paket z Makefile skripto in izvornimi zbirkami. Bodite pozorni na poimenovanja. Pred oddajo preverite delovanje z avtomatskim preizkusom. naloga_1 (naloga_1.c)
Program naj ustvari cev, pot z imenom bo podana v prvem argumentu. Če podana pot kaže na že obstoječo zbirko, kazalo ali cev naj izpiše sporočilo. Nato naj program prebere vsebino in prešteje število vseh poslanih znakov. Po zaključku branja naj izpiše prešteto število poslanih znakov.
Primer zagona:
$ ./naloga_1 ./nova_cev & $ ( echo -n "pozdravljen "; sleep 1; echo svet ) > ./nova_cev # to lahko pozenete tudi v drugem terminalu v isti poti, spodnji izpis je od programa ./naloga_1 stevilo znakov: 17
naloga_2 (naloga_2.c)
Program prejme tri argumente. Prvi argument je ime vrste za sporočila, drugi argument je prioriteta sporočila, tretji argument pa sporočilo. Program naj odpre vrsto za sporočila in pošlje podano sporočilo s podano prioriteto. V kolikor pride to težav, naj izpiše primerno opozorilo.
Primer zagona:
$ ./naloga_2 /nova_vrsta 1 hello $ ./naloga_2 /nova_vrsta 1 world $ ./naloga_2 /nova_vrsta 1 "" $ ./naloga_2 /nova_vrsta 1 "hello world" napaka pri odpiranju vrste, vrsta ne obstaja
naloga_3 (naloga_3.c)
Napišite program, ki bo omogočal dvosmerno komunikacijo. Kot prvi argument naj program prejme ključ (ključ bo veljavno ime zbirke ali vrste za sporočila brez začetnega '/'). V kolikor program poženete dvakrat iz različnih terminalov z istim ključem, si oba pognana programa pošiljata sporočila med sabo. Programa pognana z različnima ključema ne omogočata komunikacije.
Za komunikacijo lahko uporabite cevi ali vrste za sporočila. V obeh primerih boste potrebovali dva primerka. Prva cev ali vrsta pošilja sporočila od prvega programa drugemu, druga cev ali vrsta pošilja sporočila od drugega programa prvemu. Dobro premislite o vaši izbiri, ena je morda primernejša in enostavnejša za uporabo.
Iz podanega ključa naj program ustvari dva različna imena in z njima poskusi ustvariti dve cevi ali vrsti za sporočila. V kolikor jih uspešno ustvari, je to prva pognana instanca. V kolikor cevi ali vrsti že obstajajo, je to druga pognana instanca.
Program naj bere sporočila z standardnega vhoda dolga vsaj 10 znakov. Vsako prebrano sporočilo naj pošlje drugemu programu. Vsako prejeto sporočilo naj izpiše na standardni izhod. Komunikacija ni nujno izmenična. Program se zaključi kadar prejme prazno sporočilo (samo "n"). Ob zaključku enega programa se zaključi tudi drugi. Cevi ali vrsti uporabljeni za komunikacijo je potrebno pred zaključkom programov pobrisati, da lahko ponovno poženemo dve istanci z istim ključem.
Primer zagona (samo za podan argument, dejanska uporaba in pošiljanje nista prikazana):
$ ./naloga_3 kljuc_1234