read () из stdin

Рассмотрим следующую строку кода:

while((n = read(STDIN_FILENO, buff, BUFSIZ)) > 0)

Насколько я понимаю, функции чтения / записи являются частью небуферизованного ввода-вывода. Значит ли это, что функция read () будет читать только один символ за один вызов из stdio? Или, другими словами, значение n будет

    -1  in case of error
n =  0  in case of EOF
     1  otherwise

Если это не так, когда вернется приведенная выше функция read () и почему?

Примечание: я также думал, что read () будет ждать, пока успешно не прочитает BUFSIZ количество символов из стандартного ввода. Но что произойдет, если количество доступных для чтения символов меньше BUFSIZ ? Будет ли читать ждать вечно или пока не появится EOF ( Ctrl + D в unix или Ctrl + Z в Windows)?

Также, скажем, BUFSIZ = 100 и stdin = ACtrl + D (т. е. EOF сразу после одиночного символа). Теперь, сколько раз будет повторяться цикл while ?

16
задан codeforester 14 March 2017 в 05:57
поделиться