APUE读书笔记-19伪终端(12)
2020-10-09 本文已影响0人
QuietHeart
6、使用pty程序
我们现在,通过命令行选项,来看看使用pty程序的各种不同的例子。
如果我们的shell是Korn shell,我们可以执行:
pty ksh
启动一个新的shell,这个shell运行在伪终端之下。
如果文件ttyname就是我们在18章的那个程序,我们可以如下运行pty程序:
$who
sar :0 Oct 5 18:07
sar pts/0 Oct 5 18:07
sar pts/1 Oct 5 18:07
sar pts/2 Oct 5 18:07
sar pts/3 Oct 5 18:07
sar pts/4 Oct 5 18:07 pts/4 is the highest PTY currently in use
$ pty ttyname run program in Figure 18.16 from PTY
fd 0: /dev/pts/5 pts/5 is the next available PTY
fd 1: /dev/pts/5
fd 2: /dev/pts/5
(1)utmp文件
在第6章,我们叙述了utmp文件,这个文件记录了所有当前登陆到一个UNIX系统上面的用户。
问题是,一个在伪终端上面运行程序的用户,是否被当做登陆的用户?
在远程登陆中,telnetd和rlogind,显然会为在伪终端上面登陆的用户创建一个utmp文件中的条目。然而,如果用户从窗口系统或者某个程序(例如script)中运行shell于伪终端上,是否应当在utmp文件中有对应的条目,却有许多争议。有些系统会记录这些,有些却不会。如果一个系统没有在utmp文件中记录这些,那么who程序就通常不会显示相应的、被使用的伪终端。
如果utmp文件没有将other用户的写权限打开(这通常被认为是一种安全漏洞),那么任意使用伪终端的应用程序并不能写这个文件。