copy_from_user()与copy_to_user()的区别

382 阅读1分钟

copy_from_user() 是应用层写入驱动层的函数; copy_to_user() 是驱动层写入应用层内存的函数;

驱动层

static ssize_t embeded_platform_write (struct file *filp, const char __user *ubuf, size_t   count, loff_t *off)
{
char kbuf[64] = {0};
            // 写入的变量   , 传入的参数   ,参数的长度
if(!copy_from_user(kbuf ,ubuf ,count))//判断是否成功向应用层传输数据
{

    printk("kbuf is %s\n",kbuf);
	return 0;
	
}else
{
    printk("write error\n");
    return -1;
}}



ssize_t embeded_platform_read(struct file *filp, char __user *ubuf, size_t count, loff_t *ppos)
{
char kbuf[64] =  "mydate";;
if(copy_to_user(ubuf  , kbuf  , strlen(kbuf)) != 0){//判断是否成功向应用层传输数据

	printk("copy_to_user error\n");
	return -1;
}
return 0; }


应用层

int main(int argc, char **argv)
{
    int fd;
    int val=1;
    char buffer[80];
    char write_buf[64] = "write 2222date";//

    fd = open("/dev/embeded_platform", O_RDWR);        //打开设备
    if(fd < 0)
        printf("can`t open!\n");
    
    printf("Seeddata  is %s\n",write_buf);

    write(fd,write_buf,sizeof(write_buf));
    read(fd,buffer,sizeof(buffer));   //读取globalmem设备中存储的数据
    printf("read buff  is %s\n",buffer);
    return 0;
}