Do spisu tresci tematu Pliki

6.6.3 Funkcja namei() - zamiana nazwy ścieżkowej na i-węzeł




Spis treści


Wstęp

Dostęp do plików poprzez wywoływanie funkcji systemowych realizowany jest przez nazwy ścieżkowe, natomiast jądro wewnętrznie posługuje się i-węzłami. W związku z tym konieczne jest dokonywanie konwersji z nazwy ścieżkowej na odpowiadający jej i-węzeł. Konwersję tą dokonuje funkcja namei.

Nazwa ścieżkowa zbudowana jest z nazw katalogów oddzielonych znakami "/". Nazwa może się zaczynać od "/" - wtedy jest to ścieżka bezwzględna (od korzenia systemu plików) lub od innego znaku - wtedy jest to ścieżka względna (od bieżącego katalogu).

Poza główną funkcją namei istnieją również jej odmiany używane przez konkretne funkcje systemowe np. open. Zostaną one omówione w celu ukazania sposobów korzystania z algorytmu namei().

Dwie specjalne funkcje lookup() i follow_link() implementują obsługę specjalnych przypadków - przekraczanie punktów zamontowania plików i dowiązań symbolicznych. Jedynie w tych dwóch funkcjach są realizowane zależne od systemu plików operacje na podstawie pola i_op w i-węźle którego dotyczą, dzięki temu możliwe jest przejście przy punkcie montowania od jednego systemu plików do drugiego.


Schemat algorytmu namei()


Podzial algorytmu na funkcje pomocnicze w pliku źródłowym

Przybliżymy teraz zawartość pliku źródłowego - z wydzieleniem odpowiednich funkcji pomocniczych używanych przez namei().


Sposoby wykorzystania algorytmu namei()

Sam algorytm namei() jest wykorzystywany tylko przez niektóre funkcje systemowe - te w najprostszy sposób korzystające z przekształcania nazw ścieżkowych w i-węzły (np. chmod). Bardziej zaawansowane funkcje np. do otwierania pliku, obsługi katalogów (rename, mkdir, rmdir itp.) wykorzystują dir_namei(), która zwraca i-węzeł katalogu i nazwę pliku w tym katalogu. Można potem zmodyfikować wpis w pliku identyfikowanym zwróconym i-węzłem na pozycji odpowiadającej zwróconej nazwie. Funkcja open() korzysta z rozbudowanej wersji namei(), która jest oddzielną funkcją open_namei(). W niej właśnie dokonują się sprawdzenia, czy plik o który chodzi może być czytany, czy musi zostać utworzony, a może jest gniazdem i nie jest przechowywany na dysku (open_namei() korzysta również z dir_namei()).


Bibliografia


Autor: Paweł Mielańczuk