next up previous contents
Next: Linux Device List Up: OBSŁUGA PLIKÓW SPECJALNYCH Previous: Atrybuty plików specjalnych   Spis rzeczy

Jak utworzyć plik specjalny

Pliki specjalne można tworzyć przy pomocy funkcji systemowej mknod(). Pobiera ona jako parametry nazwę pliku, typ, oraz główny i podrzędny numer urządzenia, z tym, że główny i podrzędny numer urządzenia trzeba podać jako jeden parametr typu dev_t (słowo w którym wyższy bajt to numer główny a niższy to numer podrzędny urządzenia). Do utworzenia pliku specjalnego można też użyć programu o nazwie mknod który jako parametry pobiera również nawę, typ, numer główny i numer podrzędny (tylko tym razem numery są osobno). Na przykład polecenie:

  [root@bonifacy /dev] mknod /dev/zegar c 10 135
stworzy plik specjalny dla urządzenia zegara czasu rzeczywistego (sądząc z numerów) czyli właściwie drugi plik specjalny dla tego urządzenia obok /dev/rtc.

Tworzenie pliku specjalnego oznacza utworzenie i-węzła. W tym momencie nie jest sprawdzane czy nowo utworzona struktura i-węzła zawiera wskaźnik do odpowiedniego zestawu operacji plikowych służących do obsługi danego urządzenia. Dlatego też możliwe jest stworzenie wielu plików urządzeń, które tak naprawdę nie odpowiadają żadnym fizycznym urządzeniom. Tak z resztą jest we wszystkich dystrybucjach, że kilka tysięcy 'pustych' plików specjalnych tworzy się automatycznie w czasie instalacji systemu. To czy plik odpowiada prawdziwemu urządzeniu sprawdzane jest dopiero przy próbie korzystania z tego pliku. Np. jeśli nie mamy myszy 'amigowskiej' w naszym systemie to dostaniemy odpowiedni komunikat:

  [root@bonifacy /dev] cat ./amigamouse
  cat: ./amigamouse: Nie ma takiego urządzenia
... chociaż:
  [root@bonifacy /dev] ls -l ./amigamouse
  crw-rw----     1 root     root       10,    4 kwi 14  2001 amigamouse
... podczas gdy polecenie 'cat /dev/mouse' daje dosyć zabawny efekt. (dodam, że u mnie /dev/mouse jest linkiem do /dev/ttyS0 i że potem warto wydać polecenie reset)

Może się też okazać, że nie wszędzie możemy utworzyć plik specjalny:

  [root@bonifacy /dev] mknod /fat-c/null c 1 3
  mknod: /fat-c/null: Operacja niedozwolona
gdzie
  [root@bonifacy /dev] fs -T /fat-c
  Filesystem     Type       Size  Used Avail Use% Mounted on
  /dev/hda1      vfat       1.2G  1.0G  221M  82% /fat-c
  
Wynika to z faktu, że funkcja systemowa mknod() korzysta pośrednio z operacji mknod zaimplementowanej dla konkretnego systemu plików i czasem może się okazać, że dla pewnego systemu plików operacja ta nie jest zaimplementowana.


next up previous contents
Next: Linux Device List Up: OBSŁUGA PLIKÓW SPECJALNYCH Previous: Atrybuty plików specjalnych   Spis rzeczy
Marcin Czępiński 2001-12-19