linux系统编程——文件IO——补充

1. 设备节点

设备节点是应用程序与设备驱动交互的特殊文件。
当应用程序在设备节点上进行一个 IO操作(如open close write read)时,内核将请求转发给设备驱动,
设备驱动处理IO操作,并向用户返回结果。
设备节点提供设备抽象,使应用程序不必了解特定设备或特殊接口。
设备节点是unix系统上访问硬件标准机制。

内核通过 主设备号 次设备号 识别设备驱动。
主次设备号与对应的设备驱动映射表已载入内核。如果设备节点的主次设备号与内核驱动设备不对应,在设备
节点上的open操作会返回-1。这种设备被称为不存在的设备。

2. 特殊设备节点

  • 空设备 /dev/null ,主设备号1,次设备号3。内核会忽略对该设备的写请求。所有读请求都返回文件终止符(EOF)
  • 零设备 /dev/zero,主设备号1,次设备号5.忽略所有写请求,读请求返回无限null字节流
  • 满设备 /dev/full,主设备号1,次设备号7.读请求返回null字符,写请求触发ENOSPC错误,表明设备已满。

这些设备用途各不同。他们对测试应用程序如何处理各种特殊问题很有帮助。

3. 随机数生成器

/dev/random /dev/urandom 设备为随机数生成器,主设备号为1,次设备号为8和9.

生成器从设备驱动和其他源中收集噪声,并作单向散列,把结果存储在内核熵池。
读取/dev/random,返回池中的熵,作为随机数生成器的种子。
当设备中的熵值数为0,读请求会阻塞,直到得到熵。

4. 带外数据

普通文件IO用户读写 对象普通数据,和通用操作。
但针对 对象的 本身的特殊操作,称为 带外数据,使用 ioctl
如 设置串口奇偶校验。

5. 监视文件事件

posted on 2021-08-25 21:29  开心种树  阅读(76)  评论(0编辑  收藏  举报