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]

Podobne dokumenty