Сортировка: -)
Ваша программа читает 5 символов, и все. Не меньше, не больше. Остальные остаются в буфере терминала и отправляются в вашу оболочку после завершения вашей программы на С.
Поскольку вы используете read()
, который является необработанным системным вызовом, вместо какой-либо альтернативы буферизации в C stdio, такое поведение не просто ожидается, а требуется .
Из стандарта POSIX на read()
:
Функция read () должна пытаться
читать байты из файла
связанный с открытым файлом
дескриптор, fildes, в буфер
указал на буф.
...
После успешного завершения, где
nbyte больше 0, read ()
пометить для обновления поле st_atime
файл, и должен вернуть номер
прочитанных байтов. Этот номер никогда не должен
быть больше чем nbyte.
...
После успешного завершения прочитайте ()
[XSI] [Option Start] и pread ()
[Option End] должен вернуть
неотрицательное целое число, указывающее
количество байтов на самом деле прочитано.
т.е. read()
должен никогда читать больше байтов из дескриптора файла, чем запрошено.
Из связанной части на клеммах:
Однако читать не обязательно
целая строка сразу; любое количество
байты, даже один, могут быть запрошены в
читать () без потери информации.
...
Процесс last для закрытия файла оконечного устройства должен привести к тому, что любой вывод будет отправлен на устройство, а любой ввод будет отброшен.
Примечание: обычно ваша оболочка все еще будет иметь дескриптор открытого файла для терминала, пока вы не закончите сеанс.