copy_to_user的疑问
copy_to_user和copy_from_user这对函数可以用在ioctl接口中么?
最近改进一个驱动程序,用户态获得用户的输入,保存到字符数组S[1000]中,然后将S中的元素通过ioctl一个个的传递到内核态,然后处理。
我的想法是把数组S的地址传到内核态,然后用copy_from_user一下子将数据全部转移到内核态处理
问题是:我在用户态和内核态都打印了S的地址,是一致的,可是用户态和内核态的的地址中的值却不一样的。不知道为什么会是这个样子,哪个前辈给指点下问题出在哪里啊?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
回复 7# dreamice
还是不行啊,使用copy_from_user并没有把用户态地址里面的值拷贝过来
回复 6# 527639827
这样是可以的
回复 5# dreamice
那用copy_from_user能拷贝过来不?
我传递用户态数组S的地址到内核态,然后用copy_from_user将S地址里面的值拷贝到内核态申请的地址里面,这样行不?
回复 1# 527639827
值肯定是不一样的,不然怎么会有内核空间和应用空间之分呢
回复 3# yananfu
回去试试,呵呵
你在copu_from_user(k_buff, u_buff, size)后k_buff的值应该和用户空间定义的一样。
这个是不会有问题的
回复 1# 527639827
这样子应该不行,内核空间和用空间是独立分开的,必须要copy,除非用内存映射的方式,把用户空间内存映射到内核空间,或者是把内核空间映射到用户空间,
这样才能实现内存共享.