2014-05-02 24 views
7

Đây là mô tả về giá trị trả lại.giá trị trả về của copy_from_user()

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

Giá trị trả về là lượng bộ nhớ vẫn được sao chép.

Điều đó thực sự có ý nghĩa gì? Nếu giá trị trả về là 5, thì có được sao chép (count-5) byte không? Lý do mà (count-5) byte chỉ được sao chép? Có phải vì kích thước của to nhỏ hơn from (hệ thống sẽ bị lỗi sau đó, phải không)?

Trả lời

11

Chức năng copy_from_user có thể không thành công vì nhiều lý do (thường do địa chỉ không hợp lệ), chỉ sao chép một phần dữ liệu được yêu cầu hoặc thậm chí không có dữ liệu nào.

Có một quy ước (không hoàn toàn theo sau) các hàm trả về 0 để biểu thị thành công. Trong trường hợp của copy_from_user, xác định kết quả là số lượng byte không sao chép cho phép nó tuân theo quy ước này với một quy tắc khá đơn giản.

Trực quan, có thể có ý nghĩa hơn khi trả lại số byte thực sự sao chép, nhưng cách nó được xác định cho phép mã sử dụng nó để kiểm tra lỗi theo cách tương tự như đối với các hàm khác trả về 0 sự thành công. (Và trong nhiều trường hợp, nó không quan trọng bao nhiêu byte nó thất bại trong việc sao chép; bất kỳ khác không kết quả chỉ là một lỗi.)

Nếu nó trả về một khác không giá trị đó là ít hơn count, cho thấy một bản sao một phần, có thể là có nghĩa là bộ đệm bộ nhớ không gian người dùng bắt đầu trong không gian địa chỉ của người dùng nhưng mở rộng ra ngoài phần cuối của nó.

+0

OK. Cảm ơn. – user1443721

Các vấn đề liên quan