文件描述符无法读取1个字节

时间:2019-01-08 06:37:47

标签: linux io

我是Unix / Linux的初学者,只是一个关于文件描述符的问题,我的教科书问了一个问题:

在大多数Unix系统中,键入ctrl-d表示标准输入上的EOF。什么 如果您在图12.6中的程序中键入ctrl-d(只是一个使用select()的程序)到而在选择调用中被阻塞时会发生这种情况?

enter image description here

答案是:

如果从描述符读取1个字节的请求不会阻塞,则描述符已准备就绪,可以读取。如果在描述符上EOF变为true,则该描述符已准备就绪,可以读取,因为读取操作将立即返回零指示EOF的返回码。因此,键入ctrl-d会使select函数返回就绪集中的描述符0。

所以我的问题:

为什么在按ctrl-d之前文件描述符无法读取1个字节?

1 个答案:

答案 0 :(得分:1)

select阻塞,直到从其fd_set中的至少一个文件描述符中读取某些内容为止。在按CTRL-d之前,没有要读取的字节。按下CTRL-d后,stdin将关闭,并且在这种情况下,可以从stdin的缓冲区读取EOF字节。