Powrót na stronę UNIX

Program składa sie z procesu rodzica oraz n procesów potomnych, dodatkowo z procesem rodzicem związany jest pipe. Zadaniem procesu rodzica jest:

  1. Utworzenie tylu procesów potomnych ile podano parametrów do programu
  2. Odbieranie danych od procesów potomnych przesyłanych przez pipe i wyświetlanie ich na ekran po 20 znaków w linii, poprzedzając każdą linie tekstem "[od:PID, plik:FILE NAME]:".
  3. Odczekanie aż zakończą się wszystkie procesy potomne i zakończenie odczytu z pipe

Zadaniem procesu potomnego jest:

  1. Otwarcie pliku, którego nazwa jest podana jako odpowiedni parametr do programu głównego, jeśli plik ten nie istnieje, proces potomny kończy się natychmiast
  2. Podział tego pliku na akapity i przesłanie akapitów do procesu rodzica
  3. Każdy proces potomny losuje na początku swój czas życia <100,200>ns po którym to czasie ma przestać wysyłać dane i zakończyć swoje działanie. Jeśli jednak czas ten upłynie w trakcie zapisu paragrafu do pipe, należy najpierw dokończyć pisanie tego paragrafu.

UWAGI:

  1. Przez paragraf rozumie się wszystkie znaki aż do znaku nowej linii, paragrafy mogą mieć zatem różny rozmiar nie większy jednak od PIPE_BUF pomniejszony o ilość bajtów niezbędną do przekazania PID i FILE NAME. Jeśli paragraf okaże się większy traktujemy go jako kilka paragrafów o rozmiarze nie przekraczającym limitu.
  2. Do czytania/pisania przez pipe należy użyć niskopoziomowego api (read/write)
  3. Program wywołany bez parametrów wypisuje USAGE.
  4. Zadanie będzie sprawdzane przez Marcina Borkowskiego, należy je wgrać do katalogu /home2/samba/borkowskim/unix/ .


Szczególna uwagę zwracamy na:
Powrót na stronę UNIX