next up previous contents
Next: Przestrzen adresowa jadra i Up: Operacje na plikach Previous: Struktura file_operations   Spis rzeczy

Funkcje open i release

Zadaniem funkcji open jest:

  1. Zwiekszyc licznik uzycia
  2. Zainicjalizowac urzadzenie jesli otwierane pierwszy raz
  3. Przechwycic bledy zwiazane z urzadzeniem fizycznym
  4. Pobrac numer podrzedny i poprawic wskaznik f_op
  5. Zaalokowac i zapisac dane przechowywane w flip->private_data

Oto funkcja open dla dzojstika z jadra 2.4.7 W tekscie funkcji zaznaczono, ktore linie realizuja odpowiednie zadanie funkcji open (licznik uzycia utrzymuje jadro):



static int joydev_open(struct inode *inode, struct file *file)
{
struct joydev_list *list;
int i = MINOR(inode->i_rdev) - JOYDEV_MINOR_BASE; /* punkt 4 */

if (i >= JOYDEV_MINORS || !joydev_table[i])
return -ENODEV;

if (!(list = kmalloc(sizeof(struct joydev_list), GFP_KERNEL)))
return -ENOMEM;
memset(list, 0, sizeof(struct joydev_list));
/* punkt 5 */
list->joydev = joydev_table[i];
list->next = joydev_table[i]->list;
joydev_table[i]->list = list;

file->private_data = list;

if (!list->joydev->open++) /* punkt 2 */
if (list->joydev->exist)
input_open_device(&list->joydev->handle);

return 0;
}

Zadaniem funkcji release jest:

  1. Zwolnic cala pamiec zaalokowana przez open
  2. Zamknac urzadzenie po ostatnim close
  3. Zmiejszyc licznik uzycia



jasiek 2002-01-25