Systemy Operacyjne Zestaw 6.
Transkrypt
Systemy Operacyjne Zestaw 6.
Systemy Operacyjne Zestaw 6. - Kolejki komunikatów Grupa nr 1 4 V 2009 Proszę napisać odpowiedni plik Makefile oraz README dotyczący wszystkich programów/zadań w tym zestawie. 1 msg.c, msg.h Podobnie jak dla semaforów, stworzyć własną bibliotekę funkcji do obsługi kolejek komunikatów. Zaimplementować następujące funkcje: int msgCreate(int id); Tworzy kolejkę komunikatów. Klucz można utworzyć używając ftok(".", id). Funkcja zwraca identyfikator kolejki komunikatów. void msgRm(int msgid); Usuwa kolejkę komunikatów o identyfikatorze msgid. void msgSend(int msgid, komunikat *msg); Wysyła komunikat wskazywany przez msg do kolejki o identyfikatorze msgid. Stworzyć własny typ danych komunikat zgodny ze strukturą msgbuf. void msgRecv(int msgid, komunikat *msg, int mtype); Odbiera z kolejki msgid komunikat typu mtype i zapisuje do msg. void msgInfo(int msgid) Wypisuje informacje o kolejce komunikatów. Proszę użyć funkcji systemowej msgctl z komendą IPC_STAT. Proszę użyć następujących funkcji systemowych realizujących obsługę kolejek komunikatów: msgget, msgctl, msgsnd, msgrcv. 2 serwer.c, klient.c Napisać programy realizujące zadanie typu klient-serwer. Proces klient wysyła do procesu serwera ciag znaków. Serwer odbiera ten ciąg znaków i przetwarza go 1 zamieniając w nim wszystkie litery na wielkie (p. toupper), a następnie wysyła tak przetworzony ciąg znaków z powrotem do klienta. Klient odbiera przetworzony ciąg znaków i wypisuje go na ekranie. Serwer powinien obsługiwać wielu klientów naraz. Proszę użyć jednej kolejki komunikatów. Zastosować odpowiednie etykietowanie komunikatów w celu rozróżniania w kolejce danych dla serwera oraz danych dla poszczególnych klientów (np. pid procesu klienta). Najlepiej z każdym komunikatem związać dwa identyfikatory: jeden odpowiadający procesowi adresata, a drugi procesowi wysyłającemu (oczywiście, jeden z nich powinien być umieszczony w obowiązkowym polu typu komunikatu). Spróbować uruchamiać każdy proces klienta z innego X-terminala (np. użyć komendy xterm -e nazwa programu & w pliku Makefile do uruchomienia serwera i kilku klientów; więcej informacji można znaleźć w man xterm). Andrzej Görlich [email protected]