Powrót na stronę UNIX

Tematyka zadania: pliki
Rodzaj sprawdzania: na zajęciach
Czas pisania: 70 minut
Sprawdzający: Marcin Borkowski i Przemysław Dobrowolski
Autor Zadania: Przemysław Dobrowolski
Oddanie zadania: osobiście na miejscu

Należy stworzyć prosty program do zliczania statystyk dla plików źródłowych projektów. Program powienien być uruchamiany z trzema parametrami: rozszerzeniem plików źródłowych, ścieżką do pliku z wynikowymi statystykami oraz jedną scieżką do katalogu z projektem.

Wiele instatncji programu może działać jednocześnie korzystając z jednego wyjściowego pliku statystyk. Na czas zapisu statystyki należy zablokować plik, aby kolejne wpisy nie zostały wymieszane. Gdy proces uzyska dostęp do pliku, najpierw wypisuje podaną na wejściu ścieżkę którą będzie przeglądał.

Następnie program powiniem rozpocząć przeglądanie katalogu (podana ścieżka). Za każdym razem gdy napotka na plik z podanym rozszerzeniem (rozróżnia się małe i wielkie litery) powinien go otworzyć i zliczyć ilość linii. Wartość tą powinien następnie wypisać do podanego pliku statystyk w formacie: ścieżka_do_pliku:liczba_linii, tak aby każdy wpis zajmował jedną linijkę. Jako nazwę pliku należy podać pełną ścieżkę, zaczynając od korzenia systemu plików.

Do czytania i zapisywania należy użyć funkcji niskopoziomowych (read/write). Kolejność pojawiających się w statystykach plików jest dowolna (tzn. kolejność przeglądania drzewa katalogów). Na końcu pliku należy wypisać sumaryczną ilość linijek z wszystkich znalezionych plików w danym katalogu.

Uwaga na:

Nie wolno używać zmiennych globalnych. Należy zwrócić uwagę na poprawne zliczanie całkowitej ilości linijek kodu w podanym katalogu.

Przyklad uzycia programu:


user@debian:~/codestat$ ./codestat h codestat.txt /usr/include/alsa/  & ./codestat h codestat.txt testdir && cat codestat.txt

/usr/include/alsa/
/usr/include/alsa/mixer_abst.h:112
/usr/include/alsa/pcm_plugin.h:202
[...]
/usr/include/alsa/seq_event.h:319
8662
testdir
/home/user/codestat/testdir/test.h:5
5
Przydatne funkcje:
Powrót na stronę UNIX