Powrót na stronę UNIX

IPC, wersja A

Napisz wieloprocesowy program, który wypisuje na stdout kolejno n bajtów z każdego pliku podanego jako parametr wywołania, zachowując kolejność plików.
Dla każdego pliku podanego jako parametr tworzony jest proces, który wczytuje n bajtów ze swojego pliku i jeśli przyjdzie jego kolej, wypisuje owe n bajtów na stdout w formacie
              [PID, nazwa_pliku_wejsciowego.txt] n_bajtow_z_pliku_wejsciowego \n
Tylko wypisywanie danych może znaleźć się w sekcji krytyczne - wczytywanie z pliku ma się odbywać poza sekcją.
Po tym, jak proces przeczyta cały swój plik (ostatnia porcja danych może być mniejsza niż n bajtów), wypisuje na stdout napis "KONIEC PLIKU" i kończy swoje działanie, co powoduje natychmiastowe zakończenie pozostałych procesów. Jeśli proces zakończył się w wyniku zakończenia innego procesu, wypisany jest komunikat w formacie
              [PID, nazwa_pliku_wejsciowego.txt] KONIEC PRZETWARZANIA \n
Do synchronizacji procesów należy użyć semaforów. Proces rodzić powinien czekać na zakończenie się procesów potomnych. Wszelkie zasoby dzielone (semafory, pamięć dzielona) powinny być usunięte przez ostatni proces (rodzic) tuż przed jego zakończeniem. Wywołanie programu ma postać:
              nmixer n in_file_1 in_file_2 ... in_file_k
Uwaga na: Przydatne funkcje:
ftok, shmget, semget, semop, semctl (SETVAL, GETNCNT, IPC_RMID), open, write, close, fflush

Zadanie będzie sprawdzane przez Przemysława Zdroika, należy je wgrać do katalogu /home2/samba/zdroikp/unix/ .


Powrót na stronę UNIX