Semafor (sprotna naloga)
V sklopu te naloge demonstrirajte uporabo semaforja POSIX. Pripravite 3 programe, ki izvedejo v nadaljevanju opisane naloge. Pripravite tudi Makefile, ki bo vašo kodo prevedel v izvedljive programe.
Posamezni naslovi podnaloge 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)
Vaš program bo prejel parametre preko ukazne vrstice v obliki:
$ ./naloga_1 <+1,-1>
Prvi parameter je ime semaforja, ki ga program odpre. V kolikor semafor s tem imenom ne obstaja, naj program izpiše ustrezno sporočilo. Drugi parameter je lahko +1. Takrat naj vaš program poveča vrednost semaforja za 1. Drugi parameter je lahko tudi -1. Takrat naj vaš program zmanjša vrednost semaforja za 1 (program seveda čaka, če je vrednost semaforja 0).
Po uspešno izvedeni operaciji naj program izpiše sporočilo, iz katerega bo jasno ali je zmanjšal ali zvečal vrednost semaforja. naloga_2 (naloga_2.c)
Vaš program bo prejel parametre preko ukazne vrstice v obliki:
$ ./naloga_2
Program ustvari deljen pomnilnik s podanim imenom. Pomnilnik mora biti dovolj velik, da bo lahko vseboval dva semaforja in niz znakov podane dožine (dolžina je celo število podano kot drug parameter programa).
Program naj na začetku pomnilnika inicializira dva semaforja. Prvi semafor, ki nadzira branje sporočila, naj bo inicializiran na 0. Drugi semafor, ki nadzira pisanje sporočila, naj bo inicializiran na 1.
Program naj nato v zanki čaka na zapisana sporočila. Najprej naj zmanjša vrednost na prvem semaforju. Tu program čaka na prejeto sporočilo. Ob prejemu, sporočilo izpiše na standardni izhod. Nato zveča vrednost drugega semaforja in tako omogoči zapis naslednjega sporočila.
Ob prejemu praznega sporočila (dolžina niza je 0) progam izbriše oba semaforja in deljen pomnilnik ter se zaključi.