主要的文件操作方法实现
文件操作函数有很多的操作接口,驱动编程需要实现这些接口,在用户编程时候系统调用时候会调用到这些操作
以上只列出了主要的操作,下面会依次介绍:
本次的测试代码上传在:char_step2
结构体:
首先 我们会模拟写一个不操作任何设备,而仅仅是存储的一个驱动。
定义自己的一个结构体为:
data 保存数据, count表示文件的数据有效的位置, semp是一个信号量锁,在以后的编程中使用,
之后的程序中结构体也会做相应的变化,以适应linux编写驱动的习惯open方法:
打开设备并进一步初始化工作,在没有定义open方法时内核以一种默认的方式打开设备,保证每次都能正确打开。
open方法中有有struct inode参数,包含了设备号,程序中可以使用次设备号得到正操作的设备
在struct file中主要的操作是private_data指针,他可以传递任何自己创建的结构。
总得说来open方法的作用有3
1、获得操作的设备(通过设备号)
2、进一步的初始化设备
3、初始化file结构体的private_data
release方法:
主要是对open进一步初始化的操作的反操作
比如open时候分配了内存,在release时就需要释放它等
例子中因为操作内存设备,故在release时无需做什么事
read方法:
read 是把设备中的数据传递给调用者
主要步骤
1、检测偏移量有效(有些设备驱动不需要检测)
2、检测用户空间地址有效
3、将数据传给用户(在此步骤中调用的函数可能会自己检测步骤2)
4、调整偏移量
5、返回读到的数据长度
(read write 用法相对灵活,不要依赖上边的步骤,设备驱动程序要根据设备特性去设计此方法)
这里先介绍一个会检测用户空间地址是否有效的copy函数
用户调用read读设备,而在内核空间就是将数据传给用户,是一个to的操作
__must_check表述必须检测其返回值,操作成功返回0,不成功返回负的错误码
to是用户空间指针 也就是read函数传入的用户空间的指针,
from指向设备要传送的数据
n标识传入长度
write方法:
与read类似 它是从用户传数据给设备驱动
从内核空间看就是一个从用户空间取数据 是一个from操作
dst 驱动保存数据的地址
src 用户空间传入的数据
count 标识数据长度
lseek方法:
根据用户传入的参数调整文件偏移
mode
SEEK_SET |
从文件起始处开始偏移 |
SEEK_CUR |
从文件当前位置计算偏移 |
SEEK_END |
从文件末尾计算偏移 |
file结构的f_pos保存了文件的偏移量在调整文件偏移后需要 更新file中得f_pos成员
分享到:
相关推荐
Assembly Language Step-by-Step Programming with Linux® Third Edition Jeff Duntemann
React Quickstart Step-By-Step Guide To Learning React Javascript Library 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn...
[一步一步学习linux汇编语言程序设计].Assembly.Language.Step-by-Step.-.Programming.with.Linux,.3rd.Edition.Oct.2009
Shell Scripting Learn Linux Shell Programming Step-By-Step 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载...
Shell Scripting Learn Linux Shell Programming Step-By-Step 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
Shell Scripting Learn Linux Shell Programming Step-By-Step 英文azw3 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
The VIRL BOOK A Step-by-Step Guide Using Cisco Virtual Internet Routing Lab
汇编语言基于Linux环境(第3版)Assembly Language Step-by-Step - Programming with Linux, 3rd Edition
Step-by-Step Programming with Base SAS® 9.4.pdf Step-by-Step Programming with Base SAS® 9.4.pdf
ADFS_Step-by-Step_Guide
Building Cocoa Applications - A Step-by-Step Guide.pdf
Assembly Language Step-by-Step洋文 txt 费了点力气才弄出来的
React Quickstart Step-By-Step Guide To Learning React Javascript Library 英文azw3 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
Spring MVC Step-By-Step 源码。 学Spring MVC 的入门例子。采用MyEclipse 开发完成!
Assembly.Language.Step-by-Step.-.Programming.with.Linux,.3rd.Edition.Oct.2009
安装mumax3最全教程
Balanced_Scorecard_Step-by-Step
Vue Step-By-Step Guide To Mastering Vue.js From Beginner To Advanced 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 ...
Angular Essentials Step-by-Step Guidance With Code Examples 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除