* nix进程的控制终端可以读取()EOF吗?

时间:2014-10-01 17:25:10

标签: unix

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

select的手册页说在EOF的情况下它可能是0个字符,因此当我调用read()时,我不会阻止但不会获得任何字符。

但是对于控制终端文件描述符,这种EOF效应不会发生,可以吗?

1 个答案:

答案 0 :(得分:1)

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

进程也可以关闭其描述符以切断与其控制终端的连接,因此我确定读取将返回0。

自从我写了一个telnetd服务器已经20年了,所以我离开了遥远的记忆,但我很确定我在这里是正确的。如果我的回答太模糊,那么推荐这本书的好书就是W. Richard Steven在UNIX环境中的高级编程,它涵盖了各种场景,{{1} },controlling terminalsptysdaemons在他的另一本书 UNIX网络编程中有详细介绍。