![/dev/zero 是如何创建的以及如何制作像 /dev/one 这样的变体?](https://linux22.com/image/1331641/%2Fdev%2Fzero%20%E6%98%AF%E5%A6%82%E4%BD%95%E5%88%9B%E5%BB%BA%E7%9A%84%E4%BB%A5%E5%8F%8A%E5%A6%82%E4%BD%95%E5%88%B6%E4%BD%9C%E5%83%8F%20%2Fdev%2Fone%20%E8%BF%99%E6%A0%B7%E7%9A%84%E5%8F%98%E4%BD%93%EF%BC%9F.png)
我读了mknod
手册页,据我所知,这是用来制作字符设备的方法/dev/zero
,但我不明白如何让它产生无限的零位流(或其他模式)。创建此类字符设备的步骤是什么?
答案1
所做mknod
的就是将设备文件与设备驱动程序关联起来。有些设备驱动程序实现了与实际设备的交互,有些设备驱动程序只是以有用的方式对读写请求做出反应。如果你愿意,你可以坐下来编写一个驱动程序,返回歌曲的歌词星条旗永不落。但这是一个编码问题,而不是找到正确的参数mknod
。
答案2
mknod
创建设备节点,但 VFS 会检测对设备节点的访问,并将它们重新路由到内核中适当的驱动程序进行处理。所有设备节点(从 到/dev/null
到/dev/sdX
到/dev/ttyXX
)/dev/videoX
都以这种方式处理。
答案3
如果您只是想重新创建/dev/zero
能力,但使用零/空以外的字符,您可以将tr
所有零(八进制中的“\000”)更改为其他内容。
因此,为了输出无穷无尽的“a”,你可以这样做:
cat /dev/zero | tr "\000" "\141" | head -c 20
aaaaaaaaaaaaaaaaaaaa
或者跳过猫并输出一个 M 值(1024*1024),
head -c 1M /dev/zero |tr "\000" "\141"
“\141” 是“a”字符。
请参阅此网站http://www.asciitable.com/快速查看 ASCII - 八进制代码的简短页面。它实际上是以下图片:
(我知道,这是一个旧的“已解决”问题,但我在搜索无穷无尽的不同字符流时发现了它,因此这“解决”了“如何制作 /dev/one 或 /dev/[不同字符]”的问题。)