next up previous contents
Next: URZĄDZENIA ZNAKOWE: chrdevs Up: TABLICE ROZDZIELCZE Previous: Domyślne operacje dla pliku   Spis rzeczy

Otwieranie pliku urządzenia blokowego

Jak widać powyżej, domyślną operacją otwierania pliku urządzenia blokowego jest funkcja blkdev_open().

  int blkdev_open(struct inode * inode, struct file * filp)
    1. odczytuje z inode wskaźnik do struktury opisującej urządzenie
       związane z danym plikiem specjalnym ( inode->i_bdev )
    2. jeśli wskazywana struktura nie zawiera wskaźnika
       do właściwego zestawu operacji obsługujących to urządzenie,
       to odczytuje zestaw z tablicy rodzielczej za pomocą funkcji
       get_blkfops() i umieszcza go w tej strukturze 
    3. wywołuje open z tego zestawu operacji

Dzięki wywołaniu blkdev_open() struktura wskazywana przez inode->i_bdev zawiera aktualny zestaw operacji dla urządzeń o konkretnym numerze głównym. Należy zwrócić uwagę, że funkcja blkdev_open() nie zmienia zestawu operacji z i-węzła ani ze struktury obiektu pliku tylko te ze struktury wskazywanej przez inode->i_bdev. Oznacza to, że filp->f_op dalej wskazuje na def_blk_fops, a co za tym idzie przy innych odwołaniach do pliku związanego z i-węzłem (np. read, write, lseek) dalej będą wywoływane domyślne funkcje wspólne dla wszystkich urządzeń blokowych, z tą różnicą, że nie będą już musiały aglądać" do tablicy rozdzielczej.



Marcin Czępiński 2001-12-19