copy_from_user and copy_to_user

在内核的学习中会遇到很多挺有意思的函数,而且能沿着一个函数扯出来很多个相关的函数。copy_to_user和copy_from_user就是在进行驱动相关程序设计的时候,要经常遇到的两个函数。由于内核空间与用户空间的内存不能直接互访,因此借助函数copy_to_user()完成用户空间到内核空间的复制,函数copy_from_user()完成内核空间到用户空间的复制。下面我们来仔细的理一下这两个函数的来龙去脉。

arch/x86/lib/usercopy_32.c

 

copy_to_user: - Copy a block of data into user space.

unsigned long

copy_to_user(void __user *to, const void *from, unsigned long n)

{

        if (access_ok(VERIFY_WRITE, to, n))

                n = __copy_to_user(to, from, n);

        return n;

}

EXPORT_SYMBOL(copy_to_user);

       To 目标地址,这个地址是用户空间的地址;

       From 源地址,这个地址是内核空间的地址;

       N 将要拷贝的数据的字节数。

如果数据拷贝成功,则返回零;否则,返回没有拷贝成功的数据字节数。

 

copy_from_user: - Copy a block of data from user space.

unsigned long

_copy_from_user(void *to, const void __user *from, unsigned long n)

{

        if (access_ok(VERIFY_READ, from, n))

                n = __copy_from_user(to, from, n);

        else

                memset(to, 0, n);

        return n;

}

EXPORT_SYMBOL(_copy_from_user);

arch/parisc/lib/memcpy.c

arch/x86/lib/usercopy_32.c

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值