/dev/zero 是如何创建的以及如何制作像 /dev/one 这样的变体?

/dev/zero 是如何创建的以及如何制作像 /dev/one 这样的变体?

我读了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/[不同字符]”的问题。)

相关内容