内核空间和应用空间的数据拷贝(copy_to_user & copy_from_user)
Posted 正在起飞的蜗牛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内核空间和应用空间的数据拷贝(copy_to_user & copy_from_user)相关的知识,希望对你有一定的参考价值。
1、copy_to_user & copy_from_user
long copy_to_user(void __user *to, const void *from, unsigned long n)
long copy_from_user(void *to, const void __user * from, unsigned long n)
(1)copy_to_user:从设备拷贝数据到用户空间;
(2)copy_from_user:从用户空间拷贝数据到设备上;
补充:用__user修饰的指针说明指向用户空间的内存;函数成功则返回0,否则返回没有拷贝成功的数据字节数;
2、为什么不能用memcpy( )直接拷贝?
(1)内核和用户程序之间是独立的地址空间,用户程序都是用的虚拟地址,同样的内存地址在用户空间和内核空间代表不同的意义;
(2)在内核和用户空间之间拷贝数据,是要考虑安全性的,比如要检查用户空间传入地址的有效性,不能因为用户空间传递的无效地址导致内核死机;
(3)内核对用户空间的访问时候限制的,不能让用户程序随意访问内核空间;
以上是关于内核空间和应用空间的数据拷贝(copy_to_user & copy_from_user)的主要内容,如果未能解决你的问题,请参考以下文章