Рассмотрим следующую строку кода:чтения() из стандартного ввода
while((n = read(STDIN_FILENO, buff, BUFSIZ)) > 0)
Согласно моему пониманию read/write
функции являются частью небуферизованного ввода/вывода. Значит ли это, что функция read()
будет читать только один символ за звонок из stdio? Или, другими словами, значение п будет
-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
будет перебирать?
Как FYI, я считаю, что вы можете 'читать' от' 0', что является стандартным вводом, но может использовать только 'stdin' с' fread() '. –
да, ну, прямо ... thnx !! Поскольку stdin имеет тип 'FILE *', он не может использоваться с 'read' –
или' STDIN_FILENO', если вы настроены на маркировку. – Dave