Do spisu
treści tematu 6
6.5.1 Interfejs proces - system plików
Wstęp
W systemie operacyjnym Linux procesy odwołują się do plików za pomocą dobrze
zdefiniowanego zbioru funkcji systemowych. Zawiera on zarówno funkcje obsługujące
istniejące pliki, a wśród nich open(), read(),
write(), lseek() i close(),
jak i funkcje służące do tworzenia nowych plików, jak np. creat().
Obejmuje on również funkcje wykorzystywane przy implementacji potoków:
pipe() i dup().
Pierwszym krokiem jaki musi wykonać proces, by uzyskać dostęp do danych
istniejącego pliku, jest wywołanie funkcji open(). Jeśli wykona
się ona pomyślnie, to zwraca procesowi deskryptor pliku, za pomocą którego
może on wykonywać na pliku inne operacje, takie jak czytanie (read())
i pisanie (write()). Z kolei jeśli dany plik nie istnieje, to proces
może go stworzyć za pomocą funkcji creat(), która tak jak open()
zwraca w przypadku sukcesu deskryptor pliku. Wyżej wymienione funkcje read()
i write() zapewniają sekwencyjny dostęp do danych. W przypadku,
gdy zachodzi konieczność dostępu bezpośredniego (niesekwencyjnego) do pliku,
wówczas proces może skorzystać z funkcji lseek(), która umożliwia
zmianę bieżącej pozycji w pliku.
Procesy spokrewnione (jak np. przodek i potomek) mogą komunikować się
ze sobą za pomocą łączy komunikacyjnych (ang. pipe). Do ich tworzenia służy
funkcja pipe(), która przekazuje dwa deskryptory pliku: do czytania
i do pisania. Proces potomny (stworzony za pomocą funkcji fork())
dziedziczy powyższe deskryptory od procesu przodka, dzięki czemu możliwy
jest przepływ danych od jednego z procesów do drugiego. Funkcja pipe()
w połączeniu z funkcją dup(), która kopiuje dany deskryptor do pierwszej
wolnej pozycji w tablicy deskryptorów, umożliwia zrealizowanie potoków,
takich jak w interpretatorze poleceń.
W końcu, gdy proces kończy korzystać z pliku lub łącza, to może je
on zamknąć poprzez wywołanie funkcji close() z odpowiednim deskryptorem.
Zwalnia tym samym pozycję w tablicy deskryptorów odpowiadającą zamykanemu
plikowi lub łączu.
Opisane powyżej funkcje systemowe mają swoje odpowiedniki w bibliotece
funkcji standardowych wejścia - wyjścia. Funkcje standardowe tworzą interfejs
wysokiego poziomu między procesem a jądrem, umożliwiający korzystanie z
takich udogodnień jak: buforowanie, czy sformatowane wyjście. Jednakże
przy pisaniu programów użytkowych często zachodzi potrzeba bezpośredniego
odwoływania się do funkcji systemowych.
Bibliografia
-
Bach M. J. "Budowa systemu operacyjnego Unix"
Autor: Piotr Niedolistek