Powrót na stronę UNIX

IPC, wersja B

Napisz wieloprocesowy program, który wczytuje dane ze stdin i zapisuje je kolejno po n bajtów z każdego pliku podanego jako parametr wywołania, przy czym zachowana ma być kolejność plików.
Dla każdego pliku podanego jako parametr tworzony jest proces, który w odpowiednim czasie wczytuje n bajtów ze stdin i zapisuje te wczytane dane do swojego pliku. Tylko wczytywanie danych może znaleźć się w sekcji krytycznej - zapisywanie do pliku ma się odbywać poza sekcją. Po tym, jak proces napotka koniec stdin, wypisuje na stderr napis
              [PID, nazwa_pliku_wynikowego] KONIEC WEJSCIA \n
po czym kończy swoje działanie, co powoduje natychmiastowe zamknięcie pozostałych procesów. Do synchronizacji procesów należy użyć semaforów. Każda operacja P ma implementować timeout (parametr t, podany w sekundach), po którym proces wypisuje na stderr komunikat:               [PID, nazwa_pliku_wynikowego] TIMEOUT - KONIEC PRZETWARZANIA \n po czym kończy swoje działanie, co powoduje natychmiastowe zamknięcie pozostałych procesów. Jeśli proces zakończył się w wyniku zakończenia innego procesu, wypisany jest komunikat w formacie
              [PID, nazwa_pliku_wynikowego] KONIEC PRZETWARZANIA \n
Proces rodzić ma czekać na zakończenie procesów potomnych. Wszelkie zasoby dzielone mają być usunięte przez ostatni proces (rodzic) tuż przed jego zakończeniem. W przypadku gdy którykolwiek plik o nazwie podanej jako parametr już istnieje, program kończy swoje działanie z wyświetleniem komunikatu o błędzie. Wywołanie programu ma postać:
              nsplitter n t out_file_1 out_file_2 ... out_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