дескриптор файла не может прочитать 1 байт - PullRequest
0 голосов
/ 08 января 2019

Я новичок в Unix / Linux, просто вопрос по дескриптору файла, мои учебники задают вопрос:

В большинстве систем Unix ввод ctrl-d указывает EOF на стандартном вводе. Какие произойдет, если вы наберете ctrl-d для программы на рис. 12.6 (просто для программы, которая использует select ()), пока она заблокирована в вызове для выбора?

enter image description here

и ответ:

дескриптор готов к чтению, если запрос на чтение 1 байта из этого дескриптора не заблокируется. Если EOF становится истинным для дескриптора, тогда дескриптор готов к чтению, потому что операция чтения немедленно вернется с нулевым кодом возврата, указывающим EOF. Таким образом, при наборе ctrl-d функция выбора возвращается с дескриптором 0 в готовом наборе.

поэтому мой вопрос:

почему файловый дескриптор не сможет прочитать 1 байт, прежде чем мы нажмем Ctrl-D?

1 Ответ

0 голосов
/ 08 января 2019

select блокируется до тех пор, пока не будет что-то прочитать хотя бы из одного дескриптора файла в его fd_set. До нажатия CTRL-d нет байтов для чтения. После нажатия CTRL-d stdin закрывается, и когда это происходит, байт EOF становится доступным для чтения из буфера stdin.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...