use*_*721 8 linux linux-kernel
以下是返回值的说明.
unsigned long copy_from_user
(void *to, const void __user *from, unsigned long count)
Run Code Online (Sandbox Code Playgroud)
返回值是仍要复制的内存量.
它到底意味着什么?如果返回值是5,是否(count-5)复制了字节?(count-5)仅复制字节的原因是什么?是因为尺寸to小于from(系统应该崩溃,然后,右)?
Kei*_*son 15
该copy_from_user函数可能由于各种原因(通常是因为地址无效)而失败,只复制部分请求的数据,甚至没有复制.
返回0表示成功的函数有一个约定(不是普遍遵循).在这种情况下copy_from_user,将结果定义为未复制的字节数允许它使用相当简单的规则遵循此约定.
直观地说,返回实际复制的字节数可能更有意义,但它定义的方式允许使用它的代码以类似于成功返回0的其他函数的方式测试错误.(在许多情况下,无法复制多少字节并不重要;任何非零结果都只是一个错误.)
如果它返回一个小于的非零值count,表示部分副本,则可能意味着用户空间内存缓冲区在用户进程的地址空间内启动,但超出了它的末尾.