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.