如果无法产生输出,那么软件也就没什么价值了,但长久以来,I/O 一直是难缠的计算领域之一。如果你是元老级用户,应该不会忘记当初运行一个程序的大部分功夫耗费在了设置程序的输入和输出上。如今有些问题已经不存在了,例如,再也不用让操作员将磁带挂载到磁带驱动器上(至少我们见过的桌面系统和笔记本计算机不用了)。但仍有很多麻烦摆在我们眼前。
问题之一就是有太多类型的输出。向屏幕写入不同于向文件写入,至少看起来肯定不一样。向文件写入也不同于向磁带或闪存写入。如果你想让一个程序的输出直接进入另一个程序,该怎么做呢?软件开发人员是否要针对各种输出设备编写代码,甚至包括尚未发明的设备?这显然是件麻烦事。用户是不是也得知道如何将想要运行的程序连接到不同种类的设备?这也不是什么好主意。
Unix 操作系统背后最重要的概念之一就是一切皆文件(有序的字节序列)。操作系统负责实现这套魔法。无论你要写入的目标是磁盘文件、终端、磁带设备、记忆棒,还是其他东西,程序只需要知道如何写入文件就够了,剩下的事情由操作系统搞定。这种方法很大程度上简化了前面提到的问题。
下一个问题很简单:写到哪个文件?程序怎么知道是该写入代表终端窗口的文件、磁盘文件还是其他种类的文件?不难,这种事情留给 shell 就行了。
在运行程序时,还需要将它连接到输出文件和输入文件。这项任务是少不了的,但 shell 令其变得异常简单。考虑下面这条简单的命令:
dosomething < inputfile > outputfile
该命令从 inputfile 中读取输入,然后将输出发送给 outputfile。如果省略 > outputfile
,则会输出到终端窗口。如果省略 <inputfile
,那么该程序会从键盘接受输入。程序确实不知道自己输出到了哪里,也不知道自己从哪里得到的输入。你可以利用 bash 的重定向功能将输出发送到想要的任何地方(也可以是另一个程序)。
这仅仅是个开始而已。本文将探讨产生输出的各种方法,以及 shell 如何将输出发送到其他位置。
酷客网相关文章:
评论前必须登录!
注册