天天看點

get_user/put_user與copy_from_user/copy_to_user

get_user/put_user與copy_from_user/copy_to_user都是用于使用者空間與核心空間的資料交換,差別在于:

1.get_user/put_user用于簡單類型的拷貝,例如int、long;copy_from_user/copy_to_user用于拷貝大量資料,類似于memcpy;

2.put_user與copy_to_user用于從核心空間向使用者空間拷貝資料,get_user與copy_from_user用于從使用者空間拷貝資料到核心空間;

代碼舉例:

get_user/put_user與copy_from_user/copy_to_user

定義一個使用者空間指針__user * _xferi指向使用者空間傳入的參數arg;

put_user将使用者空間的_xferi.result指派為0;

copy_from_user将使用者空間的_xferi複制到核心空間的xferi中;