next up previous contents
Next: Wygodny czytacz Up: Komunikacja procfs z użytkownikiem Previous: Pisanie danych   Spis rzeczy

Jedna funkcja do wielu plików

Kiedy używa się większej ilości bardzo podobnych plików wygodniej byłołoby zazwyczaj używać jednej funkcji do wszystkich plików, które będzie różniło od klasycznego podejścia używanie pola data w strukturze proc_dir_entry. Po pierwsze pole data musi zostać zainicjalizowane:
struct proc_dir_entry* juju;
struct jakaś_strukturka* to_moje_data;
to_moje_data = kmalloc(sizeof(struct jakaś_strukturka), GFP_KERNEL);
juju->data = to_moje_data;
Pole data jest typu void* więc może być zainicjalizowane na cokolwiek. Teraz zaś, kiedy już pole data jest zainicjalizowane to funkcje czytacz i pisacz mogą go użyć do rozróżnienia plików ponieważ dostają go jako argument wywołania:
int czytacz(char* strona, char** start, off_f off, 
            int licznik, int* eof, void* data) {
  ...
  if (data==to_moje_data) {
     ... /* specjalny przypadek dla tego pliku */
  } else {
     ... /* zwykły kod dla reszty plików */
  }
  ...
}



2001-12-19