从零写OS(二十七):字符设备 —— /dev/null 和 /dev/zero

Linux 里有个特殊目录 /dev/,里面住着各种设备文件: /dev/null ← 写什么扔什么,读永远 EOF /dev/zero ← 读出来全是 \0 /dev/random ← 读出来是随机字节 /dev/tty ← 当前终端 对用户程序来说,它们和普通文件没区别:open、read、write、close,完全一样的接口。 这一章实现字符设备(char device)框架,让 VFS 能路由 /dev/ 路径,并内置 null 和 zero 两个最基础的设备。 什么是字符设备 字符设备(character device)的特点: 按字节读写,没有块/扇区的概念 没有随机寻址(不像磁盘文件可以 seek) 读写是即时的:写进去就消失(null)或立刻可读(zero/tty) 与之对应的是块设备(block device),如硬盘,以固定大小的块为单位操作。 设备注册表 核心数据结构 cdev_t: typedef struct { char name[16]; // 设备名,如 "null"、"zero" int (*open) (void); int (*read) (void *buf, uint32_t len); int (*write)(const void *buf, uint32_t len); void (*close)(int fd); int used; } cdev_t; static cdev_t devs[CDEV_MAX]; // 全局设备表 通过函数指针实现多态——不同设备注册不同的 read/write 实现。 chardev_register 向 devs[] 添加一个设备,chardev_open 按名字查找并调用 open()。 ...

May 14, 2026 · 2 min · 大飞
京ICP备14031575号-3