Mam pierwszą edycję książki The Unix Programming Environment. W rozdziale 2 autorzy stwierdzają, że katalogi są czytelne jako pliki, i wspominają kilka faktów na temat formatu tych plików. Podają przykłady użycia, takie jak cat .
(w ćwiczeniu 2-2).
Przynajmniej w Darwin katalogi nie są już czytelne jako pliki. Przynajmniej wydają się być plikami o zerowej długości podczas odczytu.
Kiedy ta zmiana nastąpiła i czy jest na to oficjalna dokumentacja?
files
filesystems
directory
Tyler
źródło
źródło
cat .
w systemach AIX i Solaris - w rzeczywistości w systemie AIX można nadal korzystać z systemu Solaris 11 (podobnie jak w systemie Linux). Fajne.Odpowiedzi:
Odwołanie do numeru błędu z najnowszej specyfikacji POSIX (POSIX.1-2008) stwierdza:
Oznacza to, że w systemie operacyjnym zgodnym z POSIX powinieneś mieć możliwość odczytu () katalogu, jeśli otworzysz go tylko do odczytu (O_RDONLY).
Właśnie próbowałem tego na komputerze NetBSD (który naprawdę dba o POSIX) i działa zgodnie z oczekiwaniami, podczas gdy nie działa na GNU / Linux z EISDIR (co nie powinno się zdarzyć).
Szybkie spojrzenie na Linuksa pokazuje, że jest to zamierzone ( http://lxr.free-electrons.com/source/fs/libfs.c#L189 ):
Chociaż konkretna implementacja systemu plików może go zastąpić (podobnie jak CEPH: http://lxr.free-electrons.com/source/fs/ceph/dir.c#L1142 ), domyślnym zachowaniem jest zwracanie EISDIR za każdym razem, gdy ktoś próbuje read () katalog, nawet jeśli jest otwarty tylko do odczytu.
Prześledziłem tę zmianę z powrotem do wersji 2.0.x, a przynajmniej dla systemu plików ext2 nadal tak było.
Tak, tak, w systemie operacyjnym zgodnym z POSIX powinieneś być w stanie odczytać katalog, ale niektóre jądra (jak Linux i, najwyraźniej inne) po prostu ignorują ten warunek i łamią standard.
źródło
readdir(2)
jest bardziej przenośny. To sugeruje mi prawidłową odpowiedź na pytanie OP: „Kiedy XSI stał się popularny”.