Я думал, что это 1 буфер, но теперь мне приходит в голову, что это может быть 2.
Я имею в виду в конвейере:
cmd1 | cmd2
Вывод cmd2
может быть, например. линия буферизована и конвейера там нет. Это должен быть буфер, управляемый потоковыми функциями libc FILE *
, такими как fwrite()
, или этот буфер также используется write(3)
? Однако я только что вспомнил, что pipe(7)
говорит о размере конвейерных буферов, которые, по-видимому, контролируются ядром.
Стандартный ввод тоже буферизован? Есть ли 3 буфера, 1 в пространстве ядра и 2 в пространстве пользователя?
Раньше я думал, что read(2)
зависает, когда конвейерный буфер пуст, но когда stdin является не конвейером, а скорее терминалом, конвейерного буфера нет, верно? Если у него нет собственного буфера, проверяет ли он разные буферы в зависимости от того, является ли стандартный ввод каналом, терминалом или обычным файлом?
РЕДАКТИРОВАТЬ: Изменено «сколько» на «что» в вопросе. Надеюсь, это не слишком большое изменение. Мне интересно знать, что такое буферы, а не просто число.