Powrót na stronę UNIX

Tematyka zadania: AIO
Rodzaj sprawdzania: po zajęciach
Czas pisania: 90 minut
Sprawdzający: Przemysław Dobrowolski
Autor Zadania: Piotr Zadrożniak
Oddanie zadania: wgranie do katalogu /home2/samba/dobrowolskip/unix/

Napisz program, który sprawdza czy liczba x jest podzielna przez k (k należy do przedziału (2, 9)). Liczba x jest zapisana w systemie pozycyjnym binarnym w pliku tekstowym workfile. Do sprawdzenia podzielności należy użyć automatu skończonego:

Jednocześnie program w trakcie obliczenia modyfikuje plik workfile. Zastępuje wczytaną część liczby numerami stanów. Każda cyfra jest zastępowana numerem stanu, w którym znalazł się automat po jej wczytaniu. Dla dzielnika k z przedziału (2, 9) wszystkie numery stanów są jednocyfrowe, zatem przetworzony plik pozostanie tej samej długości. Przykładowo dla pliku workfile postaci:
10100
i dzielnika k=4 przetworzony plik powinien mieć postać:
12120

Po zakończeniu obliczenia należy wypisać na stdout komunikat mówiący o tym, czy liczba jest podzielna przez k.

W zadaniu można wykorzystać maksymalnie 3 bufory o długości maxsize. Należy zapewnić maksymalne zrównoleglenie operacji IO. Pierwszy blok można zczytać, a ostatni zapisać w sposób synchroniczny. Program ma nie reagować na nadchodzące sygnały SIGINT.

Rozmiar pliku nie musi być wielokrotnością maxsize. Zarówno ostatni blok w pliku jak i cały plik może być krótszy niż maxsize bajtów, co musi być obsłużone w specjalny sposób - niedozwolone jest zapisywanie do plików dodatkowych znaków.

Program przyjmuje jako parametry:
Szczególną uwagę zwracamy na:
Powrót na stronę UNIX