2014-10-01 104 views
0

假设我使用读取描述符调用* nix select(read_fd, ...),该读取描述符不是从文件获得的,而是进程的控制终端。当这返回时,这意味着描述符有一些东西需要读取。可以为* nix进程控制终端读取()EOF吗?

select的手册页说,在EOF的情况下它可能为0个字符,所以当我拨打read()时,我不会阻止但不会获得任何字符。

但是这个EOF效应不能发生控制终端文件描述符,可以吗?

回答

1

是的,它可以。有几种情况,但简而言之,控制终端可以是UNIX中的任何东西。您可以在一个pty(伪tty)下启动一个进程,并将其作为控制终端插入另一个进程。如果该进程或pty消失,您的文件描述符将被关闭,您将得到EOF。所有需要的是将进程的描述符映射到0,1和2.这些可以是网络套接字,管道,文件等。

进程还可以关闭其描述符以断开连接到它的控制终端,所以我确信一个读取然后会返回0.

自从我写了一个telnetd服务器以来,它已经20年了,所以我要远离内存,但我很确定我在这里是正确的。如果我的回答过于含糊,一本好书,是指这个东西是W.理查德·史蒂芬的UNIX环境高级编程,它涵盖了所有种类的场景,controlling terminalsptysdaemonsselect()覆盖详细他的另一本书UNIX网络编程

相关问题