Powrót na stronę UNIX

Napisz program zmieniający zawartość plików podawanych na wejściu jako argumenty. Tworzonych jest n procesów, gdzie każdy z nich wykonuje k razy następującą operację: wybiera losowo dwa z podanych na wejściu plików (różne!) a następnie kopiuje porcję danych o wielkości r (w bajtach) z dowolnego (losowo wybranego) miejsca w jednym z nich w dowolne (losowo wybrane) miejsce drugiego z nich odwracając przy tym kolejność bajtów zawartych w zczytanym bloku. Losowanie miejsca rozpoczęcia operacji na pliku ma się odbyć w taki sposób, by po zakończeniu działania programu długość przetwarzanych plików nie uległa zmianie.

Jeżeli proces chce uzyskać dostęp (do odczytu bądź zapisu) do aktualnie modyfikowanego bloku danych to musi on poczekać aż proces modyfikacji się zakończy. Czytać porcję danych może na raz dowolna ilość procesów. Pliki o długości mniejszej niż r nie są brane pod uwagę (co nie znaczy, że wśród podanych na wejściu plików takie się nie znajdują). Jeżeli nadających się do przetwarzania plików jest mniej niż dwa program kończy działanie.

Program kończy działanie po przetworzeniu wszystkich katalogów ignorując wysyłane sygnały SIGINT (Ctrl+C). W zadaniu obowiązkowo należy używać niskopoziomowego I/O bez mapowania pliku do pamięci. Argumentami wywołania programu są n k r oraz lista nazw plików. Program wywołany z nieprawidłową ilością parametrów wyświetla USAGE.

Przykład wywołania programu:
$ ./main 5 3 200 plik1.txt plik2 plik3.pst pl_ik4_abc

Zadanie będzie sprawdzane przez Jurka Bartuszka. Rozwiązanie proszę wgrać do katalogu /home/samba/bartuszekj/unix/ .

Szczególna uwagę zwracamy na:

UWAGA: cykliczne alokowanie/zwalnianie pamięci oraz otwieranie/zamykanie przetwarzanych plików będzie skutkowało karą punktową

Powrót na stronę UNIX