【发布时间】:2017-12-13 13:17:48
【问题描述】:
我有点想知道像 /dev/null 和 /dev/zero 这样的伪设备是否被实现为内核中的设备驱动程序。我确定他们是,但不是 100% 确定。 /dev/null 和 /dev/zero 设备文件的主设备号相同,但次设备号不同;他们使用相同的驱动程序,该驱动程序并不真正驱动物理硬件,并且使用次要编号来指定驱动程序中的不同功能。
我的假设对吗?
【问题讨论】:
-
是的;至少在传统上,所有设备(无论是否伪设备)都在内核中作为设备驱动程序实现。通常,支持功能的实现对于伪设备来说是最小的。
/dev/null的write代码没有成功执行任何操作(/dev/zero可能也是如此);/dev/null的读取代码报告“无数据”;/dev/zero的读取代码将给定的缓冲区归零。等等。在过去的 20 年里,情况可能发生了一些变化,但这或多或少是过去的样子,我希望它仍然是这样(但我活着会感到惊讶)。 -
@JonathanLeffler 在我正在使用的 Linux 系统上,也许在其他 Linux 系统上
/dev/null、/dev/zero和/dev/random都具有相同的主编号。 -
好的;有什么问题?它们具有不同的次要编号,因此彼此做不同的事情,就像不同的磁盘驱动器可能共享一个主要编号但次要编号区分主设备的不同子部分,甚至完全区分不同的驱动器。
-
@JonathanLeffler 是的,没错。我只是说在 Linux 中提到的伪设备使用相同的驱动程序。如果您希望将其作为答案发布,那么您的第一个命令应该是一个真正的答案,所以我接受它。