Laboratorium 6
==============
Kolejki komunikatow
-------------------
Literatura:
  * Rochkind
  * Projekt Linux
  * man do poszczegolnych funkcji z msg.h
  * Linux Programmers Guide (czesc LDP; jest na sunsite)

Omawiamy:
  * funkcje: msgget, msgsnd, msgrcv, msgctl, ftok
  * programy: ipcs, ipcrm


1. Kompilacja: wywolaj program `make'

2. Uzytkowanie: uruchamianie programow
  a) program `msgtool' - prosty program umozliwiajacy wyslanie i odebranie
     komunikatu, stworzenie, skasowanie kolejki i zmiane przw dostepu.
     Przed uruchomieniem trzeba ustawic zmienna srodowiskowa MSGKEY np.:
       export MSGKEY=4321
  b) programy `msgsrv' i `msgcli' - przesylanie plikow przez kolejki
     komunikatow. Uruchomic `msgsrv' na jednej sesji, a `msgcli' na drugiej.
     Zakonczenie `msgsrv': ctrl-C. `msgcli' pobiera nazwe pliku z stdin.
  c) program `limits' sprawdza pojemnosc kolejki: maksymalna wielkosc
     komunikatu i ilosc pamieci przeznaczona na komunikaty.

2.1. Cwiczenie: Uruchomienie jednoczesne dwoch klientow `msgcli' moze
     spowodowac ,,przemieszanie sie'' przesylanych plikow, poniewaz obaj
     klienci czytaja komunikaty o tym samym identyfikatorze (rownym 2).
     Jak temu najprosciej zaradzic? Zmodyfikuj programy `msgsrv.c'
     i `msgcli.c'.

3. Pliki:

   err.c, err.h
	Obsluga bledow
	
   msgtool.c
   	Program demonstrujacy operacje na kolejkach komunikatow
	
   mesg.h
   	Plik naglowkowy dla `msgsrv.c' i `msgcli.c'. Definicja komunikatu
	i klucza kolejki.
  
   msgsrv.c
        Serwer sluzacy do wysylania plikow. W petli odbiera nazwy plikow 
	od klientow i przesyla te pliki klientom. Przechwytuje SIGINT, 
	ktorego wywolanie powoduje zakonczenie programu.
   
   msgcli.c
        Klient czyta z wejscia nazwe pliku i wysyla serwerowi. Odebrany
	plik wypisuje na stdout.
  
   limits.c
   	Badanie ograniczen systemu: maksymalnego rozmiaru komunikatu
	i pojemnosci kolejki. Przyklad uzycia flagi IPC_PRIVATE.
	Ograniczenia te sa zawarte w Linuxie w pliku /usr/include/linux/msg.h

4. Porzadki
  Na koniec laboratorium nalezy posprzatac po sobie: sprawdzic, czy zostaly
  w systemie niepokasowane kolejki (ipcs) i jesli tak, usunac je (ipcrm).
  
5. Uwagi:
  a) Jest Makefile w nowym stylu, zachecamy do ogladania i zrozumienia.
  b) Uwaga na prawa dostepu: jesli nie bedzie praw do czytania program
     ipcs nie pokaze nam kolejki. (ale mimo to da sie ja skasowac ipcrm)
  c) Linux w standardowej konfiguracji jadra nie umozliwia przesylania
     komunikatow o wielkosci 4Kb. Patrz: wynik dzialania programu `limits'.
     
