Powrót na stronę UNIX

Napisz jednoprocesowy program, który generuje dane w p porcjach k-bajtowych i zapisuje je asynchronicznie do pliku wynikowego wykorzystując co najwyżej n dynamicznie alokowanych buforów (wielkości k bajtów każdy. Po wygenerowaniu p porcji, program czeka, aż wszystkie asynchroniczne zapisy się zakończą, wypisuje na stdout komunikat o liczbie zaalokowanych=wykorzystanych buforów i kończy działanie.

W pierwszym bajcie generowanej porcji danych zapisany jest binarnie numer tej porcji, a kolejne k-1 bajtów jest kodami ASCII poczynając od 'A'. Dane powinny być generowane bezpośrednio do bufora.

Program początkowo nie ma żadnego zaalokowanego bufora. Nowy bufor można zaalokować tylko jeśli nie ma możliwości wykorzystania już zaalokowanego bufora (żądnego jeszcze nie zaalokowana lub wszystkie zaalokowane są aktualnie używane). Jeśli skończy się limit buforów, program powinien odczekać aż któryś z buforów się zwolni.

Program pobiera 4 parametry n k p <plik_wynikowy> :
n makszymalna liczba buforów, zakres 1-100
k wielkość porcji danych/bufora, zakres 1-199
p liczba porcji do wygenerowania i zapisania, zakres 1-100
Jeśli plik_wynikowy, do którego będą zapisane dane, już istnieje, program powinien wypisać na stdout komunikat o błędnym parametrze i zakończyć się(niepowodzeniem).
Przykładowe użycia programu:

	$aio_gen 10 300 100 ./out_file

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

Szczególna uwagę zwracamy na:

Powrót na stronę UNIX