我有点想知道像/ dev / null和/ dev / zero这样的pseduo设备是否被实现为内核中的设备驱动程序。我确定他们是,但不完全是100%肯定。 / dev / null和/ dev / zero设备文件都具有相同的主要编号但不同的次要编号;他们使用相同的驱动程序,它不会真正驱动物理硬件和次要数字来指定驱动程序中的不同功能。
我的假设是对的吗?
答案 0 :(得分:1)
至少经典地说,所有设备 - 伪或非 - 都在内核中实现为设备驱动程序。通常,支持功能的实现对于伪设备来说是最小的。 /dev/null
的写代码没有成功(对/dev/zero
也是如此); /dev/null
的读取代码报告“无数据”; /dev/zero
的读取代码将给定的缓冲区归零。等等。在过去的20年中,情况可能会有所改变,但这或多或少是以前的样子,以及我对它的预期如何(但我感到很惊讶)。
在我正在使用的Linux系统上,也许在其他Linux系统上,
/dev/null
,/dev/zero
和/dev/random
都具有相同的主编号。
这不一定是个问题。它们具有不同的次要编号,因此可以并且确实可以做彼此不同的事情,就像不同的磁盘驱动器可以共享一个主要数字,但次要数字区分主设备的不同子部分,甚至完全不同的驱动器。
在Mac上(运行macOS Sierra 10.12.5),/dev/null
和/dev/zero
共享相同的主号码,/dev/random
和/dev/urandom
共享相同的主号码与其他两个不同。
crw-rw-rw- 1 root wheel 3, 2 Jul 10 20:10 /dev/null
crw-rw-rw- 1 root wheel 14, 0 Jun 13 13:34 /dev/random
crw-rw-rw- 1 root wheel 14, 1 Jun 13 13:34 /dev/urandom
crw-rw-rw- 1 root wheel 3, 3 Jun 13 13:34 /dev/zero
更令人感兴趣的是,有许多设备具有相同的主要和次要数字:
crw------- 1 jleffler staff 0, 0 Jul 8 01:54 /dev/console
crw-rw-rw- 1 root wheel 0, 0 Jun 13 13:34 /dev/fbt
crw-rw-rw- 1 root wheel 0, 0 Jun 13 13:34 /dev/lockstat
crw-rw-rw- 1 root wheel 0, 0 Jun 13 13:34 /dev/machtrace
crw-rw-rw- 1 root wheel 0, 0 Jun 13 13:34 /dev/profile
crw-rw-rw- 1 root wheel 0, 0 Jun 13 13:34 /dev/sdt
crw-rw-rw- 1 root wheel 0, 0 Jun 13 13:34 /dev/systrace
我不确定那些区别于他们应该做什么。