Ostatnio zadaniem dodatkowym na laboratorium z systemów operacyjnych było napisanie funkcji, która przejrzy, podany argumentem katalog, rekurencyjnie oraz zliczy rozmiar znajdujących się w nim wszystkich plików. Niby nic wielkiego, ale poziom trudności dla mnie podwyższyła przede wszystkim możliwość pisania tylko w czystym języku C z wykorzystaniem API unix/linux – na codzień piszę jednak w językach wyższego poziomu,
Ale do rzeczy. Napisałem pierwszą wersję funkcji i dumny z siebie, że tak szybko poszło odpaliłem. Zdziwienie było niesamowite jak zobaczyłem, że funkcja rozpoznaje katalogi jako pliki. Co więcej, rozmiary plików były różne (czasami zdecydowanie różne) od rzeczywistych rozmiarów jakie uzyskałem stosując komendę
ls -alR
Pierwsze co zrobiłem to zajrzałem do książki Rochkinda “Programowanie w systemie unix dla zaawansowanych” i sprawdziłem jak się sprawdza czy dany wpis jest katalogiem. Ujrzałem dwie wersje kodu, w tym jedna identyczna jak z mojej funkcji. Spróbowałem tej drugiej – niestety bez pozytywnego rezultatu. Sprawdziłem też funkcję stat() z API linuksa czy czasem nie ma jakiegoś myku przy jej stosowaniu. Pech chciał, że albo przeoczyłem fakt, o którym zaraz napiszę, albo po prostu nie było tam nic o tym napisane.
Czytaj dalej ‘Rekurencyjne przeglądanie katalogów w unix w języku C’