next up previous contents
Next: Funkcje read i write Up: Operacje na plikach Previous: Funkcje open i release   Spis rzeczy

Przestrzen adresowa jadra i uzytkownika

Oto naglowki funkcji read i write:

ssize_t read( 
  struct file *flip, 
  char *buff, 
  size_t count, 
  loft_t *offp 
);

ssize_t write( 
  struct file *flip,
  const char *buff, 
  size_t count, 
  loft_t *offp 
);

Systemowe read i write przekazuje do funkcji sterownika wskaznik do bufora w przestrzeni adresowej uzytkownika (drugi argument). Oznacza to, ze te funkcje sterownika beda kopiowac dane pomiedzy przestrzenia adresowa jadra i przestrzenia adresowa uzytkownika. Bezposrednie odwolanie sie do przestrzeni adresowej uzytkownika (np. przez memcpy) moze spowodowac blad braku strony w pamieci (page fault).

Do kopiowania danych pomiedzy przestrzenia adresowa jadra i przestrzenia adresowa uzytkownika sluza dwie funcje (z <asm/uacces.h>) bedace podstawowym narzedziem w implementacji funkcji read i write.


unsigned long copy_to_user(
void *to,
const void *from,
unsigned long count
);


unsigned long copy_from_user(
void *to,
const void *from,
unsigned long count
);

Obie funkcje sprawdzaja poprawnosc wskaznika w przestrzeni adresowej uzytkownika. W przypadku niepoprawnosci wskaznika lub napotkania niepoprawnego adresu podczas kopiownania funkcje zwracaja ilosc bajtow, ktore zostaly jeszcze do skopiowania.

\includegraphics[scale = 0.7]{obrazek2.ps}



jasiek 2002-01-25