linux – copy_from_user()的返回值

前端之家收集整理的这篇文章主要介绍了linux – copy_from_user()的返回值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是返回值的描述.
unsigned long copy_from_user
    (void *to,const void __user *from,unsigned long count)

返回值是仍要复制的内存量.

它到底意味着什么?如果返回值为5,是否复制了(count-5)个字节?仅复制(count-5)个字节的原因是什么?是因为to的大小小于(系统应该崩溃,然后,右)?

解决方法

copy_from_user函数可能由于各种原因(通常由于地址无效)而失败,只复制部分请求的数据,甚至没有复制.

返回0表示成功的函数有一个约定(不是普遍遵循).在copy_from_user的情况下,将结果定义为未复制的字节数允许它使用相当简单的规则遵循此约定.

直观地说,返回实际复制的字节数可能更有意义,但它定义的方式允许使用它的代码以类似于成功返回0的其他函数的方式测试错误. (在许多情况下,无法复制多少字节并不重要;任何非零结果都只是一个错误.)

如果它返回一个小于count的非零值,表示部分拷贝,则可能意味着用户空间内存缓冲区在用户进程的地址空间内启动,但超出了它的末尾.

猜你在找的Linux相关文章