Linux设备文件
Linux大部分设备使用文件接口和上层应用程序交互
字符设备和块设备区别:
字符设备:直接打开设备文件操作,操作最小单位是字节
块设备:一般通过文件系统操作,操作的最小单位是块
网络设备:没有设备文件,一般通过套接字操作,操作的最小单位是字节
伪字符设备(pseudo):没有实际物理硬件的设备文件
/dev/null:写入的内容全部丢弃
/dev/zero:读出的内容为全0
/dev/random:产生随机数
设备文件一般放在/dev目录中
创建设备文件:
mknod 文件名 类型 主设备号 次设备号
主次设备号用来找到对应的物理设备
主设备号用来标识设备的型号,次设备号用来区分同一个型号的不同设备
查看主设备号:
/proc/devices
1. i节点(struct inode)是保存文件属性信息的数据结构
2. 字符设备结构体(struct cdev)定义一类字符设备
3. 文件操作结构体(struct file_operations)定义此设备上的操作
4. file结构体(struct file)表示已打开的文件,记录到已打开文件数组中,文件描述符就是数组下标
打开文件对应的inode和file_operations记录到此结构体中
对于设备文件的操作,最终调用的是文件操作结构体中的函数指针
container_of 通过结构体中的成员地址,计算结构体的首地址。
offset_of 计算成员在结构体中的偏移
虚拟地址空间
char * p; 0 ~ 4G
32位 Linux 应用程序运行在32位操作系统上能够访问的地址空间0-3G
内核空间:3-4G
用户空间:0-3G