copy_to_user/copy_from_user参数解析

copy_to_user/copy_from_user解析

copy_to_user和copy_from_user是在进行驱动相关程序设计的时候,要经常遇到的函数。由于内核空间与用户空间的内存不能直接互访,因此借助函数copy_to_user()完成内核空间到用户空间的复制,函数copy_from_user()完成用户空间到内核空间的复制。

首先,我们来看一下这个函数的在源码文件中是如何定义的:

copy_to_user
Name
copy_to_user --  Copy a block of data into user space.
Synopsis

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

Arguments

to

Destination address, in user space.
from

Source address, in kernel space.
n

Number of bytes to copy.
Context

User context only. This function may sleep.
Description

Copy data from kernel space to user space.

Returns number of bytes that could not be copied. On success, this will be zero.

从注释中就可以看出,这个函数的主要作用就是从内核空间拷贝一块儿数据到用户空间,由于这个函数有可能睡眠,所以只能用于用户空间。它有如下三个参数,

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

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

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

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

copy_from_user
Name
copy_from_user --  Copy a block of data from user space.
Synopsis

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

Arguments

to

Destination address, in kernel space.
from

Source address, in user space.
n

Number of bytes to copy.
Context

User context only. This function may sleep.
Description

Copy data from user space to kernel space.

Returns number of bytes that could not be copied. On success, this will be zero.

If some data could not be copied, this function will pad the copied data to the requested size using zero bytes.

从注释中就可以看出,这个函数的主要作用就是从用户空间拷贝一块儿数据到内核空间,由于这个函数有可能睡眠,所以只能用于内核空间。它有如下三个参数,

   To 目标地址,这个地址是内核空间的地址;

   From 源地址,这个地址是用户空间的地址;

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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值