Рассмотрим следующую строку кода:
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 будет повторяться?