Rozważ system plików ukierunkowany na niektóre urządzenia osadzone, który robi niewiele więcej niż przechowywanie plików w hierarchicznej strukturze katalogów. W tym systemie plików brakuje wielu operacji, do których możesz być przyzwyczajony w systemach takich jak Unix i Windows (na przykład jego uprawnienia dostępu są zupełnie inne i nie są powiązane z metadanymi przechowywanymi w katalogach). Ten system plików nie dopuszcza żadnego rodzaju twardego lub miękkiego łącza, więc każdy plik ma unikalną nazwę w ścisłej strukturze drzewa.
Czy jest jakaś korzyść z przechowywania łącza do samego katalogu i jego elementu nadrzędnego w strukturze danych na dysku, która reprezentuje katalog?
Większość systemów plików UNIX .
i ..
wpisy na dysku. Zastanawiam się, dlaczego nie obsługują ich w warstwie VFS (sterownik ogólnego systemu plików). Czy to artefakt historyczny? Czy istnieje dobry powód, a jeśli tak, to który dokładnie, aby ustalić, czy jest on odpowiedni dla mojego systemu wbudowanego?
źródło
Odpowiedzi:
Posiadanie linków do katalogu nadrzędnego ma dla mnie sens. Gdybyś ich nie miał, zawsze musiałbyś pracować z całą listą katalogów. Na przykład
/home/svick/Documents/
należałoby przedstawić jako{ /, /home/, /home/svick/, /home/svick/Documents }
. Jeśli tego nie zrobisz, nie będziesz w stanie znaleźć katalogu nadrzędnego (lub byłoby to bardzo drogie). Jest to nie tylko nieefektywne, ale także niebezpieczne. Jeśli masz dwie takie listy, które się nakładają, mogą one łatwo zsynchronizować się, jeśli przeniesiesz jakiś katalog.Z drugiej strony, jeśli masz odniesienie do katalogu nadrzędnego, jest to bardziej wydajne i bezpieczniejsze.
Nie widzę żadnego powodu, aby mieć link do bieżącego katalogu. Jeśli masz strukturę reprezentującą jakiś katalog i chcesz uzyskać do niego dostęp, korzystanie z niego
.
jest zawsze całkowicie niepotrzebne. Z tego powodu oczekiwałbym, że.
łącze tak naprawdę nie istnieje w strukturze systemu plików i jest tylko wirtualne.źródło
.
i..
wpisy.Dostajesz mniej specjalnych przypadków. W wielu sytuacjach VFS może obsługiwać „..”, ponieważ obsługuje każdą inną nazwę katalogu.
źródło
Jedynym powodem, który mogę sobie wyobrazić, jest następujący scenariusz:
Oryginalna implementacja systemu plików istniała w tym samym formacie katalogów, ale pojęcia ścieżek i podkatalogów nie były wówczas brane pod uwagę (patrz System plików Unix PDP-7 ).
Wtedy ludzie myśleli, że rozdzielczość ścieżki i podkatalogi będą przydatne!
Aby zachować pewną zgodność wsteczną ze starszymi implementacjami, zdecydowano, że
.
i..
będą przechowywane na dysku, tak jak każdy inny katalog.Więc może pozostały nam te bezużyteczne artefakty, tylko ze względu na kompatybilność wsteczną z 40-letnim oprogramowaniem? Wiarygodny scenariusz?
Uwaga: Dodanie tych wpisów do listy katalogów również nie było głupie, ponieważ i tak trzeba gdzieś przechowywać numer i-węzła prawdziwego katalogu nadrzędnego (pamiętaj, że w tym czasie dozwolone były twarde linki do katalogów) oraz odniesienie do twojego własny numer i-węzła może być dobrym sprawdzeniem rozsądku.
źródło
Nie widzę powodu do wdrożenia
.
ani..
na żadnym z tych poziomów. Jednak jeśli celujesz w systemy osadzone, każdą warstwę, którą możesz zaoszczędzić, może być zarobek w dolarach, więc warto wdrożyć wszystko tak nisko, jak to możliwe.Jeśli chodzi o ogólną potrzebę
.
i..
, jak wyraziłbyś ścieżki względne bez nich? Przynajmniej..
jest niezbędny dla ścieżek, które opuszczają bieżące poddrzewo. Jeśli nie potrzebujesz takich ścieżek (może drzewo jest prymitywnym sposobem kodowania uprawnień dostępu?), Nie potrzebujesz..
.źródło