stdout буферизируется по строке при подключении к терминалу, но я помню, где-то читал, что чтение (по крайней мере, из stdin) автоматически запустит stdout. Все реализации C, которые я использовал, сделали это, но теперь я не могу найти его в стандарте.Есть ли чтение из stdin flush stdout?
Это имеет смысл, что он работает именно так, иначе такой код:
printf("Type some input: ");
fgets(line, sizeof line, stdin);
нужно будет дополнительно fflush(stdout);
Так как стандартный вывод гарантированно промывать здесь?
EDIT:
Как несколько ответов сказал, кажется, нет гарантии в стандарте, что выход на стандартный вывод в моем примере будет появляться перед чтением из стандартного ввода, но с другой стороны , это намерение указано в (свободный черновом) стандарта:
входные и выходные динамика интерактивных устройств должны проходить , как указано в 7.19.3. Для целей эти требования заключаются в том, что небуферизованный или строковый буферизированный выход появляются как можно скорее , чтобы сообщения, которые действительно отображались до появления программы , ожидали ввода.
(ISO/IEC 9899: Проект Комитета TC2 - 6 мая 2005 г., стр. 14).
Итак, похоже, что нет никакой гарантии, но, вероятно, она будет работать в большинстве реализаций. (Знаменитые последние слова ...)
. Перекрестная ссылка на 7.19.3 (7.21.3 на C11) также полезна, поскольку в ней упоминается, какие операции ввода, как ожидается, вызовут промывку. Они обсуждаются на https://stackoverflow.com/a/39536803/8586227. –