util-linux 软件包自带 more 命令,但它不适用于本项目。原因是库依赖性和空间限制。util-linux 提供的 more 需要 libncurses 或 libtermcap 才能工作,而根磁盘软盘上没有足够的空间来容纳所有内容。因此,为了拥有 more 命令,我们将不得不发挥创造力。
more 命令用于逐页显示文件。它有点像 cat 命令,但每显示 25 行就会暂停。基本逻辑概述如下。
读取文件的一行。
在屏幕上显示该行。
如果已显示 25 行,则暂停。
循环并再次执行。
当然,还有一些细节被省略了,例如如果屏幕尺寸与我们预期的不符该怎么办,但总的来说,这相当准确地代表了 more 命令的作用。鉴于这个简单的程序逻辑,编写一个简短的 shell 脚本来模拟 more 的基本功能应该不难。《BASH(1) 手册页》和《Adv-BASH-Scripting-Guide》将作为参考。
more 脚本将需要访问根磁盘上尚不存在的设备文件。具体来说,more 需要拥有stdin, stdout和stderr,但与此同时,我们应该检查是否缺少其他/dev文件。《Linux 标准库》要求null, zero和tty存在于/dev目录中。用于null和tty的文件已在项目的前期阶段存在,但我们仍然需要/dev/zero。我们可以参考 Linux 源代码devices.txt中的Documentation目录,以获取主设备号和次设备号。
可以通过使用我们之前使用过的互联网资源以及一个新站点来找到这三个软件包。“sed”和“ed”软件包可以在我们找到 BASH 的同一个地方找到,即 GNU FTP 服务器。procps 软件包在 Ibiblio LSM 搜索中出现,但这是一个旧版本。为了找到最新版本,我们可以访问 Freshmeat 网站 http://freshmeat.net 并在项目中搜索“procps”。
“sed”和“ed”软件包都具有 GNU 熟悉的 configure 脚本,因此非常容易构建。“procps”没有 configure 脚本,但这并不会使事情变得太困难。我们可以阅读软件包的README文件,以了解如何设置各种配置选项。我们可以使用其中一个选项来避免使用和安装 libproc 的复杂性。设置SHARED=0使得libproc成为 ps 的集成部分,而不是单独的共享库。