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
如 设置串口奇偶校验。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .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吗?