Linux程序设计(第4版)
上QQ阅读APP看书,第一时间看更新

5.2 与终端进行对话

如果不希望程序中与用户交互的部分被重定向,但允许其他的输入和输出被重定向,你就需要将与用户交互的部分与stdout、stderr分离开。为此,你可直接对终端进行读写。由于Linux本身是多用户系统,它通常拥有多个终端,这些终端或者是直接连接的,或者是通过网络进行连接的,那么,你怎样才能找到要使用的正确终端呢?

幸运的是,Linux和UNIX提供了一个特殊设备/dev/tty来解决这一问题,该设备始终是指向当前终端或当前的登录会话。由于Linux把一切事物都看作为文件,所以你可以用一般文件的操作方式来对/dev/tty进行读写。

在下面的实验中,你通过向getchoice函数传递参数的方法来加强对输出的控制,修改后的程序为menu3.c。

实验 使用/dev/tty

以menu2.c程序为蓝本,对其做如下修改,使得输入和输出直接指向/dev/tty:

现在,当运行这个程序并将输出进行重定向时,你仍然可以在终端上看到菜单提示信息,但程序的其他输出(如表明菜单项已被选择)则被重定向到文件中。