理解:linux中一切设备皆是文件

  • 比如,标准输入和标准输出就是文件,由于输入输出绑定物理对象(如键盘)的不同,它们是链接文件。
    /dev/stdin是软链接文件,目的是通过 “动态指向” 适配不同场景的实际输入设备(终端、文件、管道等),让应用程序无需修改代码即可灵活读写。

设备对应文件

Linux 将所有硬件设备(如键盘、硬盘、网卡、打印机等)都对应到/dev目录下的一个 “设备文件”。例如:

  • 键盘对应/dev/input/event0(字符设备);
  • 硬盘对应/dev/sda(块设备);
  • 网卡没有直接的设备文件,但通过网络接口(如eth0)抽象。

这些设备文件不是 “存储数据的文件”,而是内核与硬件交互的 “接口”

设备操作通过 “文件 API” 统一实现

在 Linux 中,操作设备和操作普通文件使用完全相同的函数(如open()read()write()close())。例如:

  • 读键盘输入,相当于open("/dev/input/event0")read()
  • 写数据到硬盘,相当于open("/dev/sda")write()

这种统一接口让程序员无需关心硬件细节(比如键盘和硬盘的物理原理不同),只需掌握文件操作逻辑即可控制设备,极大简化了编程。

设备文件通过 “主 / 次设备号” 标识硬件

设备文件本身不存储数据,而是通过 “主设备号” 和 “次设备号” 关联到内核中的设备驱动:

  • 主设备号:标识设备类型(如硬盘的主设备号是 8,终端是 4);
  • 次设备号:标识同类型中的具体设备(如/dev/sda1的次设备号是 1,/dev/sda2是 2)。

内核通过主设备号找到对应的驱动程序,再通过次设备号定位具体设备,完成硬件交互。