内核接口

ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);
ssize_t (*read) (struct file *filp, char __user *buf, size_t count, loff_t *f_pos);
ssize_t (*write) (struct file *filp, const char __user *buf, size_t count, loff_t *f_pos);

filp:待操作的设备文件file结构体指针;
buf:待写入所读取数据的用户空间缓冲区指针;
count:待读取数据字节数;
f_pos:待读取数据文件位置,读取完成后根据实际读取自救书重新定位;
__usr:是一个空的宏,主要用来显示的告诉程序员它修饰的指针变量存放的是用户空间地址。


struct file {// ...struct path                     f_path;struct inode                    *f_inode;const struct file_operations    *f_op;atomic_long_t                    f_count;unsigned int                     f_flags;fmode_t                          f_mode;struct mutex                     f_pos_lock;loff_t                           f_pos;struct fown_struct               f_owner;// ...
}

hello_drv.c

static char kernel_buf[1024];static ssize_t hello_drv_read (struct file *file, char __user *buf, size_t size, loff_t *offset)
{int err;printk("%s %s line %d\n", __FILE__, __FUNCTION__, __LINE__);err = copy_to_user(buf, kernel_buf, MIN(1024, size));if(err < 0){err = -EFAULT;return err;} return MIN(1024, size);
}static ssize_t hello_drv_write (struct file *file, const char __user *buf, size_t size, loff_t *offset)
{int err;printk("%s %s line %d\n", __FILE__, __FUNCTION__, __LINE__);err = copy_from_user(kernel_buf, buf, MIN(1024, size));if(err < 0){err = -EFAULT;return err;} return MIN(1024, size);
}

test.c

char buf[1024];fd = open("/dev/hello", O_RDWR);len = read(fd, buf, 1024);
write(fd, argv[2], len);

1、kernel_buf是定义在内核中,buf是定义在用户空间的,两者不相通;
2、参数struct file *file是用于管理进程打开的文件,当open时会被创建;
打开的设备节点时/dev/hello这个需要和驱动里注册的设备名一致。
在用户层中:
当open设备节点时返回一个fd,是结构体files_struct中数组的下标,而数组成员的类型就是file,因此可以得到驱动程序hello_drv_read(…)中第一个参数;
3、注意,始终需要判断需要写入写出数据的大小和缓冲区大小的,防止数据大于缓冲区大小;
4、FILE,为打印相应的文件名,
  LINE,为打印语句在源代码中相应的行,
  FUNCTION,为打印语句在源代码中相应的函数名。
5、虽然用户层的buf和内核层的buf是同一个用户层地址,但是两者是隔离的;所以从程序里看到的都一样都是虚地址。

write、read相关推荐

  1. 专利审查指南(2010)

    专利审查指南(2010) http://www.chinalaw.gov.cn/article/fgkd/xfg/gwybmgz/201004/20100400253035.shtml来源国务院法制办 ...

  2. 湖南省中职学业水平测试试题信息技术

    试题: 1.按照指法要求,击打空格键,应使用( ). A.左手和右手的食指,因食指最灵活 B.左手或右手的拇指 C.左手或右手的中指 D.左手或右手的无名指 2.显示器的清晰度是由( )决定的. A. ...

  3. Photoshop入门与进阶实例:1.4 图层的概念和基本操作

    1.认识图层 图层功能被誉为Photoshop的灵魂,这个比喻一点也不夸张!图层在我们使用Photoshop进行图像处理中,具有十分重要的地位,也是最常用到的功能之一.掌握图层的概念是我们学习Phot ...

  4. 2023年你最值得了解的信息技术-AI篇(二)

    20688 北京朗阁信息技术有限公司 企业服务  前沿技术 北京市 mailkey 专注云企业邮件领域的产品,随云服务而生. 未融资 MailKey 是北京朗阁信息技术有限公司(以下简称"朗 ...

  5. 程序主动进行电话短信报警,自定义电话、短信、钉钉报警通知

    程序主动进行电话短信报警,自定义电话.短信.钉钉报警通知 一. 规则说明 这里我们要利用到阿里云的云监控的手段,有一个叫做事件监控的东西,可以通过自定义事件上传来进行监控报警. 流程: 程序发现错误 ...

  6. nginx配置http、https访问,nginx指定ssl证书,阿里云腾讯云华为云设置nginx https安全访问

    nginx配置http.https访问 要设置https访问需要从对应的云厂商申请证书,并下载Nginx证书到服务器. 我这里从阿里云申请了免费的域名证书,然后将证书放置在服务器的/etc/ssl/. ...

  7. 在Chrome中打开网页时出现以下问题 您的连接不是私密连接 攻击者可能会试图从 x.x.x.x 窃取您的信息(例如:密码、通讯内容或信用卡信息)

    现象:在Chrome中打开网页时出现以下问题 您的连接不是私密连接 攻击者可能会试图从 x.x.x.x 窃取您的信息(例如:密码.通讯内容或信用卡信息). 当点开"了解详情"后显示 ...

  8. 使用第三方SDK(如微信、qq、快看、头条等),调用接口405 Method Not Allowed

    使用第三方SDK(如微信.qq.快看.头条等),调用接口405 Method Not Allowed 错误描述:postman请求正常,但客户端调用后接口没有反应,但返回了405错误. 解决方法:第三 ...

  9. OpenAPI使用(swagger3),Kotlin使用swagger3,Java使用swagger3,gradle、Maven使用swagger3

    OpenAPI使用(swagger3) demo见Gitte 一.背景及名词解释 OpenAPI是规范的正式名称.规范的开发工作于2015年启动,当时SmartBear(负责Swagger工具开发的公 ...

  10. Alibaba Cloud Linux 2.1903 LTS 64位服务器yum源下载404,Alibaba Cloud Linux 2实例中使用docker-ce、epel等YUM源安装软件失败

    [Alibaba Cloud Linux 2.1903 LTS 64位]服务器yum源下载404 failure: repodata/repomd.xml from docker-ce-stable: ...

最新文章

  1. R语言sys方法:sys.timezone函数返回当前系统时区的名称、system.File函数查找系统文件或者安装包的文件路径(例如查看R Base可安装路径、dplyr包的安装路径)
  2. 为什么多线程可以利用到多核?
  3. Task2.特征提取
  4. Vue使用Element-ui按需引入大坑
  5. struts 通配符的使用
  6. (Life)质量和服务_由购买联想笔记本想到的
  7. 把live2D模型放上网页
  8. 不确定度在线计算_计量测量的不确定度详解
  9. 梅小雨20190919-5 代码规范,结对
  10. CSS动画-Animation
  11. 你也可以掌控EMI:EMI基础及无Y电容手机充电器设计
  12. python编程自然数表达式_实现四则运算 (python实现)by 周乃君 张宏根
  13. 图解 魔方快速还原 7步法
  14. excel根据颜色赋值 Excel填充颜色单元格替换成数字 excel把所有红色变成1
  15. 恋人日记服务器维护中,知乐日记:恋人不会在最终相遇 因为他们本来就一直在一起...
  16. Percolator事务模型
  17. 几何画板在教学中的作用
  18. 惊了!这是一篇《IOC》说明书?
  19. 博客大赛,我的一场生意一场梦
  20. 小程序点击video暂停/开始

热门文章

  1. asp.net core 防止机密信息外泄GitHub
  2. 基于Azure Kinect SDK获取物体rgb图、深度图、红外IR图和点云数据并保存到本地
  3. 基于android的社团管理app
  4. 【计算机毕业设计】123网上商城系统设计与实现
  5. Laplace算子和Laplacian矩陣
  6. 不要与最好的朋友合伙开公司?对吗
  7. 工具系列 | 使用Lodop进行WEB打印程序开发
  8. DTI脑影像处理流程-配准机器生成的特征图
  9. PS高阶操作之字体特效
  10. 热门招聘丨 XTransfer史上最全产品技术岗位公开招聘