Powrót na stronę UNIX

Program do rozsyłania komunikatów pomiędzy wszystkimi uruchomionymi instancjami programu. Linia tekstu wpisana na konsoli dowolnego klienta ma zostać powielona na konsolach wszystkich innych instancji tego samego programu o ile były one uruchomione z tego samego katalogu roboczego. Nie powielamy tekstu na konsoli procesu wysyłającego. Przed tekstem komunikatu należy wypisać numer PID nadawcy

Program ma działać na pamięci współdzielonej i semaforach. Maksymalna długość wiadomości to 80 znaków. Należy zadbać o to, aby kopiowanie wiadomości z bufora na stdout nie kolidowało z zapisem nowej wiadomości do tego bufora. Nie trzeba troszczyć się o to, czy wszystkie procesy zdążą odczytać wiadomość z bufora np.: 2 wiadomości wpisane do bufora w krótkim odstępie czasowym, pierwsza może nie pojawić się u wszystkich klientów a nawet może się zdarzyć, że nie pojawi się u żadnego z klientów. Nie wolno wielokrotnie wypisywać tej samej wiadomości

Zadanie można wykonać w oparciu o 2 semafory, pierwszy dopuszcza po jednym procesie na raz do bufora, drugi służy jako poczekalnia na nową wiadomość. Proces który chce odczytać nową wiadomość powinien najpierw zająć 2 semafor, gdy to się uda zająć 1 semafor i odczytać wiadomość po czym zwolnić 1 semafor. Proces piszący musi zająć 1 semafor, zmienić wiadomość po czym zwiększyć wartość semafora 2 o ilość czekających na nim procesów i na koniec zwolnić semafor 1. Jakie będą wartości początkowe semaforów ?

Program jest bezparametrowy kończy działanie zarówno w przypadku C-c jak i C-d (EOF), Normalne zakończenie działania jednego z programów nie może zablokować pozostałych. Zasoby IPC sysV pozostają nieskasowane w systemie.

Zadanie będzie sprawdzane przez Marcina Borkowskiego, należy je wgrać do katalogu /home2/samba/borkowskim/unix/ .

Szczególna uwagę zwracamy na:
Powrót na stronę UNIX