Рассмотрим следующую строку кода:
while((n = read(STDIN_FILENO, buff, BUFSIZ)) > 0)
В соответствии с моим пониманием read/write
функции являются частью небуферизованного ввода-вывода. Значит ли это, что функция read()
будет читать только один символ за звонок из stdio? Или, другими словами, значение n будет
-1 in case of error
n = 0 in case of EOF
1 otherwise
Если это не так, когда вернется предыдущая функция read()
и почему?
Примечание. Я также думал, что read()
будет ждать, пока он успешно прочитает BUFSIZ
количество символов из stdin. Но что происходит в случае, количество доступных для чтения символов меньше BUFSIZ
? Будет ли читать навсегда или до тех пор, пока EOF не придет (Ctrl + D
в unix или Ctrl + Z
на окнах)?
Кроме того, скажем BUFSIZ = 100
и stdin = ACtrl+D
(например, EOF сразу после одного символа). Теперь сколько раз while loop
будет повторяться?