Powrót na stronę UNIX

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

  1. utworzenie n procesów potomnych
  2. odczyt pliku tekstowego p (podanego jako parametr)
  3. podział tego pliku na akapity i przesłanie akapitów do jednego z aktywnych procesów potomnych za pomocą pipe, procesy potomne mają być wybierane sekwencyjnie.
  4. odczekanie aż zakończą się wszystkie procesy potomne

Zadaniem procesu potomnego jest odbieranie danych od procesu rodzica i wyświetlanie ich na ekran po 20 znaków w linii, poprzedzając każdą linie tekstem "[PID]:". Dodatkowo w każdym wypisanym akapicie należy oznaczyć początek i koniec linia "[PID]star|stop". Każdy proces potomny losuje na początku swój czas życia <2,9>s po którym to czasie ma przestać odbierać dane z pipe i zakończyć swoje działanie. Jeśli jednak czas ten upłynie w trakcie wypisywania paragrafu, należy najpierw dokończyć pisanie na ekran.

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 jeśli paragraf okaże się większy traktujemy go jako kilka paragrafów o rozmiarze nie przekraczającym limitu.
  2. Może się zdarzyć, że wszystkie procesy potomne zakończą się przed wypisaniem całego pliku, wtedy proces rodzic ma zakończyć działanie.
  3. Do czytania/pisania przez pipe należy użyć niskopoziomowego api (read/write)
  4. Ponieważ bufor pipe jest obsługiwany przez jądro, możliwa jest sytuacja w której jeden proces już zapisał coś do pipe, a drugi o tym jeszcze nie może wiedzieć i zamyka swój deskryptor, w takiej sytuacji odpowiedni błąd lub sygnał będzie wygenerowany dopiero podczas następnej operacji na takim deskryptorze.
  5. n i p to parametry wywołania programu, ich brak ma skutkować wyświetleniem USAGE, n > 0 ale bez górnego limitu. Jeśli plik nie istnieje program ma się natychmiast zakończyć
  6. 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