next up previous contents
Next: Dodatek A Up: Funkcja ioctl Previous: Funkcja ioctl   Spis rzeczy

Pobieranie arg

Jezeli pod arg zapisana jest liczba calkowita mozemy z niej korzystac bezposrednio. Jezeli jest to wskaznik ponownie mamy problem z dostepem do danych zapisanych w przestrzeni adresowej uzytkownika. Aby ustrzec sie przed bezposrednim odwolaniem do strony nie znajdujacej sie w pamieci nalezy uzyc funkcji sprawdzajacej (z <asm/uacces.h>):

access_ok(int type, const void *addr, unsigned long size);

Pierwszy argument okresla akcje jaka chcemy przeprowadzic na przestrzeni adresowej uzytkownika ( VERIFY_READ | VERIFY_WRITE), addr jest adresem w pamieci uzytkownika, ktory sprawdzamy, size ilosc bajtow.

Do czytania i pisania, odpowiednio, w przestrzeni adresowej uzytkownika pojedynczych jednostek pamieci sluzy zestaw funkcji:
put_user(datum,ptr) - zawiera access_ok
__put_user(datum,ptr)
get_user(local,ptr) - zawiera access_ok
__get_user(local,ptr)

Funkcje te moga kopiowac bajt, slowo, podwojne slowo. Odpowiednia ilosc transferowanych danych zapewnia specjalna funkcja gcc.



Subsections

jasiek 2002-01-25