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,     rozdz. 7.1, 7.3-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 identyfikator 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:
		execXXX() - 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 
     Uniksowych (fork(), 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).
