Do spisu treści tematu 6
 

  6.5.7 Zmiana bieżącej pozycji w pliku - funkcja lseek()

Spis treści


 Wstęp

Funkcja lseek() służy do ustawiania bieżącej pozycji w pliku, a więc, za razem, niesekwencyjne na nim działanie. Taki sposób pracy z plikiem nie jest w pełni zgodny z ogólnymi zasadami operacji na plikach (które nawet w nazwie są "sekwencyjne"), ale może okazać się bardzo przydatny, szczególnie, że Linux oferuje kilka wariantów korzystania zeń; można przesuwać się w pliku naprzód lub w tył względem początku pliku, jego końca lub aktualnej pozycji.

 Opis algorytmu

Na początku funkcja sprawdza poprawność parametrów, którymi są: deskryptor pliku, liczba, której znaczenie zależy od wartości trzeciego parametru - trybu zmiany położenia w pliku. Sprawdzane jest mianowicie to, czy deskryptor mieści się w zakresie tablicy deskryptorów (tzn. czy jest nie większy niż stała NR_OPEN), czy w tablicy deskryptorów na podanym miejscu znajduje się plik i czy odpowiada jemu jakiś i-węzeł. Następnie sprawdzana jest poprawność ostatniego z parametrów wywołania. W przypadku niespełnienia co najmniej jednego z tych warunków zwracany jest błąd.
Następnie, jeśli rozpatrywany system plików ma własną funkcję ustawiania pozycji w pliku, to jest ona wywoływana. W przeciwnym przypadku (a przy systemie EXT2 jest włanie "przeciwny przypadek" - EXT2 korzysta z przeznaczonej do tego celu funkcji domyślnej).
Teraz, w zależności od wartości trzeciego parametru dokonywane jest ustawienie znacznika na nowa pozycję (poprzez dodanie liczb). Może się na jeden z trzech sposobów: Jeśli obliczona w ten sposób pozycja jest ujemna, to funkcja zwraca błąd.
Gdy obliczona, nowa pozycja w pliku jest różna od poprzedniej, to uaktualniane jest odpowiednie pole w tablicy plików, a znacznik dla funkcji czytania z wyprzedzeniem jest ustawiany na 0.
Wynikiem działania funkcji jest numer nowej, bieżącej pozycji w pliku.
 

 Źródła informacji

Projekt Linux - funkcja lseek()
 

Autor: Adam Kieżun