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   开心种树  阅读(93)  评论(0编辑  收藏  举报

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示