Uniksowy interfejs dostępu do pliku

Interfejs dostępu do plików w systemach uniksopodobnych obejmuje operacje wyszczególnione na wcześniejszym slajdzie, jednak kilka funkcji wymaga komentarza.

Funkcja unlink usuwa dowiązanie do pliku. W systemie unikskopodobnym plik może mięć kilka nazw, zwanych dowiązaniami twardymi. Funkcja unlink usuwa wskazane dowiązanie, co nie musi oznaczać fizycznego usunięcia pliku. Fizyczne usunięcie pliku następuje dopiero w wyniku usunięcia ostatniego dowiązania.

Funkcja creat (bez litery e na końcu), jak nazwa wskazuje, służy do tworzenia pliku. W tym samym calu można jednak wykorzystać funkcję open, która również umożliwia utworzenie pliku, ale udostępnia więcej parametrów i tym samym daje większe możliwości w zakresie obsługi przypadków szczególnych.

W opisie interfejsu pominięto między innymi funkcję fcntl, oraz kilka funkcji dostępu do specyficznych atrybutów plików.

  • Tworzenie pliku — funkcja creat
  • Usuwanie dowiązania do pliku — funkcja unlink
  • Odczyt z pliku — funkcja read
  • Zapis do pliku — funkcja write
  • Skracanie pliku (usuwanie końcowej zawartości, Obcinanie) — funkcja truncate
  • Przesunięcie wskaźnika bieżącej pozycji —funkcja lseek
  • Otwieranie pliku — funkcja open
  • Zamykanie otwartego pliku — funkcja close

System uniksopodobny — tworzenie pliku


  • Funkcja systemowa: creat
  • Parametry:
    • nazwa pliku (ścieżka)
    • prawa dostępu
  • Wartość zwrotna: deskryptor pliku lub -1 w przypadku błędu.
  • Uwaga: funkcja tworzy plik i otwiera go do zapisu.

System uniksopodobny — otwieranie pliku


  • Funkcja systemowa: open
  • Parametry:
    • nazwa pliku (ścieżka)
    • tryb otwarcia (do zapisu, do odczytu itp.)
  • Wartość zwrotna: deskryptor pliku lub -1 w przypadku błędu.
  • Wersja 3-argumentowa funkcji umożliwia również tworzenie pliku.

System uniksopodobny — zamykanie deskryptora pliku


  • Funkcja systemowa: close
  • Parametry:
    • deskryptor
  • Wartość zwrotna: 0 w przypadku poprawnego zakończenia lub -1 w przypadku błędu.

System uniksopodobny — usuwanie dowiązania do pliku


  • Funkcja systemowa: unlink
  • Parametry:
    • nazwa pliku (ścieżka)
  • Wartość zwrotna: 0 w przypadku poprawnego zakończenia lub -1 w przypadku błędu.

System uniksopodobny — skracanie pliku


  • Funkcja systemowa: truncate
  • Parametry:
    • nazwa pliku (ścieżka) lub deskryptor
    • wielkość w bajtach do jakiej ma nastąpić skrócenie (docelowa wielkość pliku)
  • Wartość zwrotna: 0 w przypadku poprawnego zakończenia lub -1 w przypadku błędu.

System uniksopodobny — odczyt zawartości pliku


  • Funkcja systemowa: read
  • Parametry:
    • deskryptor pliku
    • adres w pamięci, pod którym zostaną zapisane dane odczytane z pliku
    • liczba odczytywanych bajtów
  • Wartość zwrotna: liczba rzeczywiście odczytanych bajtów lub -1 w przypadku błędu.

System uniksopodobny — zapis zawartości pliku


Podobnie jak w przypadku funkcji read, w parametrach funkcji write również nie ma wskazania, który obszar pliku ma być zapisywany. Wpływ na miejsce zapisywania może mieć tryb otwarcia. W przypadku otwarcia pliku z flagą O_APPEND następuje zawsze dopisywanie na końcu. Jeśli flaga nie została użyta, w wyniku wykonania funkcji może nastąpić nadpisanie dotychczasowej zawartości, przy czym plik zachowuje się tak, jak przy dostępie sekwencyjnym.

  • Funkcja systemowa: write
  • Parametry:
    • deskryptor pliku
    • adres w pamięci, spod którego zostaną pobrane dane do zapisu
    • liczba zapisywanych bajtów
  • Wartość zwrotna: liczba rzeczywiście zapisanych bajtów lub -1 w przypadku błędu.

Przykład realizacji operacji odczytu w systemie uniksopodobnym


Przykład pokazuje efekt trzech kolejnych operacji odczytu pliku po jego otwarciu. Przyjmując od góry początek pliku, pierwsze wykonanie read umieści w buforze pamięci pierwsze sześć bajtów, następne nadpisze te sześć bajtów kolejnymi dziewięcioma z pliku, ostatnie wykonanie częściowo nadpisze zwartość bufora kolejnymi pięcioma bajtami. Jest to typowy przykład dostępu sekwencyjnego. Po wykonaniu operacji stan otwarcia pliku zmienia się w tak, że następna operacja dotyczy kolejnego fragmentu pliku.

slajd 22

Przykład realizacji operacji zapisu w systemie uniksopodobnym


Podobnie realizowana jest operacja zapisu. Wynikiem kolejnych trzech wywołań funkcji write będzie zapisanie łącznie 20 kolejnych bajtów w pliku. Jeśli w zapisywanym obszarze pliku były już jakieś dane, zostaną nadpisane. Jeśli plik byłby krótszy niż 20 bajtów, nastąpi jego powiększenie.

slajd 23

System uniksopodobny — zmiana wskazania bieżącej pozycji


Z każdym otwartym plikiem związany jest wskaźnik bieżącej pozycji. Wskaźnik ten identyfikuje miejsce, od którego rozpocznie się kolejna operacja zapisu lub odczytu. Po każdej operacji wskaźnik bieżącej pozycji przesuwa się o tyle bajtów, na ilu operacja była wykonana.

Niezależnie od wykonywanych operacji dostępu wskaźnik ten można przesunąć za pomocą funkcji lseek. Wskazanie miejsca docelowego polega na podaniu przesunięcia względem początku pliku, końca pliku lub pozycji bieżącej. Wartość dodatnia oznacza przesunięcie w kierunku końca pliku, a ujemna w kierunku początku pliku.

Funkcja lseek jest uzupełnieniem funkcji read i write, umożliwiającym bezpośredni dostęp do plików. W przypadków plików sekwencyjnych, do których należą np. pliki urządzeń, czy łącza (potoki, kolejki FIFO) funkcja lseek nie ma zastosowania. W ten sposób udało się zachować jednolitość interfejsu dostępu do plików — nie trzeba było wyodrębniać dwóch rodzajów funkcji do odczytu i do zapisu.

  • Funkcja systemowa: lseek
  • Parametry:
    • deskryptor pliku
    • wielkość przesunięcia w bajtach
    • punkt odniesienia (początek pliku, bieżąca pozycja, lub koniec pliku)
  • Wartość zwrotna: położenie wskaźnika po przesunięciu lub -1 w przypadku błędu.

Zmiana wskazania bieżącej pozycji


Przedstawiony schemat ilustruje przykładową realizację operacji odczytu z przesunięciem wskaźnika bieżącej pozycji o 9 bajtów w kierunku końca pliku. Skutkiem jest pominięcie tych 9 bajtów.

slajd 25

W przypadku zapisu skutkiem przesunięcia jest pominięcie 9 bajtów, czyli pozostawienie tego fragmentu bez zmian.

slajd 26