2012-09-18 48 views
1

在uaccess.h中聲明的copy_from_user函數是否從指針修改(void __user *)? 指針在函數聲明中沒有聲明爲const,只是它指向的內容。copy_from_user是否修改用戶指針?

我問的原因是我想兩次使用copy_from_user,第二個copy_from_user從第一個完成的地方複製。

我打算做這樣的事情,它保證工作嗎?

//buf is a user pointer that is already defined 
copy_from_user(my_first_alloced_region, buf, some_size); 
//do stuff 
copy_from_user(my_second_alloced_region, buf + some_size, some_other_size); 

在此先感謝。

回答

3

由於您只是將指針值作爲參數傳遞給函數,因此被調用函數無法修改指針本身。如果參數被聲明爲指向const類型的指針,則被調用者無法修改正在指向的任何一個(至少沒有沒有會拋棄指針的const性的強制轉換)。修改調用方本身的指針值的唯一方法是將被調用方傳遞給指針指針類型。

+0

啊,真的,那是我的一個相當新人的監督。那麼在函數聲明中使用const關鍵字指針是毫無意義的? – Michael

+0

如果你的願望是保護指針值本身,那麼是的,它是毫無意義的......'const T *'是一個指向'T'類型的'const'對象的指針,所以它保護指向的對象,不是指針值。但是由於你只傳遞一個指針值,而不是指針引用,所以即使被調用者修改它,指針變量本身也不能在調用者中改變。 – Jason

+0

我的意思是使用指針本身的const類型'T * const var_name' – Michael