Unix *nix进程的控制终端能否读取()EOF?

Unix *nix进程的控制终端能否读取()EOF?,unix,Unix,假设我调用*nixselect(read\u fd,…)时使用的读取描述符不是从文件中获得的,而是进程的控制终端。当它返回时,这意味着描述符有一些东西要为我读取 select的手册页说,在EOF的情况下,它可以是0个字符,因此当我调用read()时,我不会阻塞,但不会得到任何字符 但这种EOF效应不会发生在控制终端文件描述符上,是吗?是的,它可以。有几种情况,但简而言之,控制终端可以是UNIX中的任何东西。您可以在pty(伪tty)下启动一个进程,并将其插入另一个进程作为其控制终端。如果该进程或

假设我调用*nix
select(read\u fd,…)
时使用的读取描述符不是从文件中获得的,而是进程的控制终端。当它返回时,这意味着描述符有一些东西要为我读取

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


但这种EOF效应不会发生在控制终端文件描述符上,是吗?

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

一个进程也可以关闭它的描述符来断开与它的控制终端的连接,所以我确信读操作会返回0

我写telnetd服务器已经有20年了,所以我的远程内存快用完了,但我很确定我在这里是正确的。如果我的回答太模糊,那么关于这方面的一本好书是W.Richard Steven的《UNIX环境中的高级编程》,它涵盖了各种场景,
控制终端
PTY
守护进程
,以及
选择()
在他的另一本书《UNIX网络编程》中有详细介绍