一、copy_to_user
功能:用于将内核空间的数据拷贝到用户空间。
函数原型:unsigned long copy_to_user(void __user *to, const void *from, unsigned long n);

*to是用户空间的指针,
*from是内核空间指针,
n表示从内核空间向用户空间拷贝数据的字节数

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

二、copy_from_user
功能:用于将用户空间的数据传送到内核空间。
函数原型:unsigned long copy_from_user(void * to, const void __user * from, unsigned long n)

第一个参数to是内核空间的数据目标地址指针,
第二个参数from是用户空间的数据源地址指针,
第三个参数n是数据的长度。

如果数据拷贝成功,则返回零;否则,返回没有拷贝成功的数据字节数。
此函数将from指针指向的用户空间地址开始的连续n个字节的数据发送到to指针指向的内核空间地址

例子:

 struct as2056_rmsg *rmsg = NULL;char *buffer = NULL;//申请内存空间存放数据,//申请的空间大小跟as2056_rmsg 结构体一样rmsg = kmalloc(sizeof(struct as2056_rmsg), GFP_KERNEL); //切记,要申请内存空间才能使用if(rmsg == NULL) {printk("error: allo\n");return -EFAULT;}//从用户空间拷贝as2056_rmsg 结构体指向的数据到内核空间的指针rmsg当中,成功则返回零;//否则,返回没有拷贝成功的数据字节数。ret = copy_from_user(rmsg, (struct as2056_rmsg *)arg, sizeof(struct as2056_rmsg)); if(ret) {kfree(rmsg);printk("copy write mesg from user error, ret = %d\n", ret);return -EFAULT;}//申请内存空间存放数据,申请的空间大小跟rmsg->rlen一致buffer = kmalloc(rmsg->rlen, GFP_KERNEL); //切记,要申请内存空间才能使用if(buffer == NULL) {kfree(rmsg);printk("error: allo\n");return -EFAULT;}//从内核空间buffer拷贝数据到用户空间rmsg->buf,成功则返回零;//否则,返回没有拷贝成功的数据字节数。ret = copy_to_user(rmsg->buf, buffer, rmsg->rlen); if(ret) {kfree(buffer);kfree(rmsg);printk("copy data to user failed = %d\n", ret);return -EFAULT;}

Linux内核和用户空间数据交互copy_to_user和copy_from_user相关推荐

  1. linux内核态用户态交互,Linux用户态和内核态交互的几种方式

    创建于 2013-04-13 迁移自本人的百度空间 -------------------------------- 1/内核态->用户态 在kernel module中调用printk是最简单 ...

  2. linux 内核与用户空间通信之netlink使用方法

    Linux中的进程间通信机制源自于Unix平台上的进程通信机制.Unix的两大分支AT&T Unix和BSD Unix在进程通信实现机制上的各有所不同,前者形成了运行在单个计算机上的Syste ...

  3. Linux内核和用户空间通信的方法

    Linux内核和用户空间通信的方法(二)- 使用netlink   作者:Kendo 2006-9-3 这是一篇学习笔记,主要是对<Linux 系统内核空间与用户空间通信的实现与分析>中的 ...

  4. linux kernel and user space通信机制,Linux内核与用户空间通信机制研究.pdf

    ISSN 1009-3044 E-mail:info@CCCC.net.CR ComputerKnowledgeandTechnology电脑知识与技术 http://www.dnzs.net.cn ...

  5. linux内核打开文件数,放开Linux内核对用户进程可打开文件数和TCP连接的限制

    一. 检查linux内核 uname -a lsb_release -a 二.用户进程可打开文件数限制 1)vim /etc/security/limits.conf *       -      n ...

  6. Linux内核空间-用户空间通信之debugfs

    一.debugfs文件系统简介 debugfs虚拟文件系统是一种内核空间与用户空间的接口,基于libfs库实现,专用于开发人员调试,便于向用户空间导出内核空间数据(当然,反方向也可以).debugfs ...

  7. linux内核与用户空间的九种通信机制

    目前Linux提供了9种机制完成内核与用户空间的数据交换,分别是内核启动参数.模块参数与 sysfs.sysctl.系统调用.netlink.procfs.seq_file.debugfs和relay ...

  8. Openwrt按键检测分析-窥探Linux内核与用户空间通讯机制netlink使用

    首先看一下Openwrt系统中关于按键功能的使用和修改,以18.06版本为例 按键功能实现在脚本中, 比如18.06/package/base-files/files/etc/rc.button/re ...

  9. Linux(内核和用户态的)动态内存管理

    http://www.ibm.com/developerworks/cn/linux/l-cn-slub/ 内核对象缓冲区管理 Linux 内核在运行过程中,常常会需要经常使用一些内核的数据结构(对象 ...

  10. linux内核创建用户,分析Linux内核创建一个新进程的过程

    谢文杰 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.实验目的 阅 ...

最新文章

  1. 创新类编辑推荐:Sequence iBPMS平台
  2. 006---Linux用户、群组和权限
  3. c++代码表白_一行 Python 代码能实现什么丧心病狂的功能? | CSDN博文精选
  4. 【MySQL】Mysql索引优化与底层数据结构深入剖析 - 笔记
  5. 全国计算机等级考试题库二级C操作题100套(第12套)
  6. 第17课:RDD案例(join、cogroup等实战)
  7. 关于考研与工作(人生规划)的个人思考
  8. SpringBoot入门二
  9. 计算机基础:计算机网络-socket编程
  10. OpenGL:绘制太阳地球例子
  11. python对列表中的字典的字段进行排序
  12. SaltStack实战之远程执行-Modules
  13. 一起来学Masonry (一)
  14. 区块链 以太坊 solidity require revert assert
  15. QT5.9 for 安卓开发 环境配置
  16. 2019奥斯卡谁是赢家 这里有一份来自AI的预测名单
  17. delphi 运算符
  18. 增值税发票开票软件卷票打印错位配置修正指南
  19. 利用计算机名称共享打印机步骤,如何连接共享打印机汇总教程
  20. 2019年12月份统考计算机应用基础题库,2019年12月网络教育统考《计算机应用基础》模拟题...

热门文章

  1. 检测手机屏幕是否亮屏解锁
  2. 第四次作业(胡明浩)
  3. 使用ThinkPHP框架高速开发站点(多图)
  4. 转,jQuery入门[4]-链式代码
  5. 《Windows via C/C++》学习笔记 —— 用户模式的“线程同步”之“条件变量”
  6. 关于文本摘要,知道这些足以!
  7. 收藏 | 《周志华机器学习详细公式推导版》发布,Datawhale开源项目pumpkin-book
  8. 李宏毅机器学习——无监督学习(三)
  9. Harbor 2.1发布,工程师的发际线有救了!
  10. 解构控制反转(IoC)和依赖注入(DI)