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

  1. Bach M. J. "Budowa systemu operacyjnego Unix"

Autor: Piotr Niedolistek