Laboratorium 1 
==============
Tworzenie procesow
------------------
Literatura:
  M. J. Rochkind "Programowanie w systemie UNIX dla zaawansowanych"
  W. R. Stevens "Programowanie zastowan sieciowych w systemie UNIX"
  M. J. Bach "Budowa systemu operacyjnego UNIX"

Lektura podstawowa: Rochkind, rozdz. 5.3 - 5.7 lub
                    Stevens, rozdz. 2.5

Lektura uzupelniajaca: Bach 7.1, 7.3, 7.4, 7.5

1. Kompilacja: wywolaj program `make'
2. Uzytkowanie: uruchamianie programow
3. Pliki:

   err.h
        Plik naglowkowy biblioteki obslugujacej bledy.

   err.c
	Biblioteka obslugujaca bledy.

   proc_fork.c
        Program ilustrujacy tworzenie nowego procesu.
	Wazne funkcje systemowe:
		getpid - zwraca idenyfikator procesu
		fork - tworzy nowy proces
		exit - konczy dzialanie procesu
		wait - oczekuje na zakonczenie procesu potomnego
        Istotne polecenia: ps, kill.

   proc_tree.c 
	Tworzy 5 nowych procesow majacych wspolnego przodka ("drzewo"
	procesow).
	* Cwiczenie: Napisz program tworzacy "linie" procesow, gdzie kazdy
          proces potomny jest przodkiem nastepnego procesu.  

   proc_exec.c
        Tworzy nowy proces, ktory wykona polecenie "ps".
	Funkcje:
		exec - wykonuja program (szesc postaci rozniacych sie 
		sposobem przekazywania argumentow).

   simple_shell.c
        Przykladowa implementacja prostego interpretatora polecen.
        Wyjscie z programu przez Ctrl-D.
        * Cwiczenie: Dodaj do niego mozliwosc wykonywania procesow w tle.
        
4. Uwagi: 
  a) Plik naglowkowy `unistd.h' zawiera deklaracje standardowych funkcji 
     unixowych (fork, exec, write, etc.).  Warto go dolaczyc do programu, aby 
     kompilator nie generowal ostrzezen takich jak, "implicit declaration of 
     function `fork'".
  b) Deklaracja funkcji wait znajduje sie w `sys/wait.h'.
  c) Nalezy zwrocic uwage na bledy przekazywane przez poszczegolne funkcje 
     systemowe i na sposob obslugi tych bledow!
  d) Oprocz pary funkcji fork-exec mozna uzyc funkcji system, ktora 
     powoduje wywolanie /bin/sh z argumentem tej funkcji.  Jest to drozsze niz
     para fork-exec, bo powoduje powstanie dodatkowego procesu (interpretatora
     polecen).

