Чтение из stdin flush stdout?

stdout буферизируется по строке при подключении к терминалу, но я помню, где-то читал, что чтение (по крайней мере, из stdin) автоматически запустит stdout. Все реализации C, которые я использовал, сделали это, но теперь я не могу найти его в стандарте.

Имеет смысл, что он работает именно так, иначе код выглядит так:

printf("Type some input: "); fgets(line, sizeof line, stdin); 

потребуется дополнительный fflush(stdout);

Значит, stdout гарантированно покраснели?

РЕДАКТИРОВАТЬ:

Как сказано в нескольких ответах, в стандарте нет гарантии, что вывод в stdout в моем примере появится перед чтением из stdin, но, с другой стороны, это намерение указано в (мой бесплатный черновик) стандарт:

Динамика входных и выходных сигналов интерактивных устройств должна иметь место, как указано в 7.19.3. objective этих требований состоит в том, чтобы как можно скорее появился небуферизованный или строковый буферизированный вывод, чтобы убедиться, что сообщения запроса действительно отображаются до того, как программа ожидает ввода.

(ИСО / МЭК 9899: Проект Комитета ТК2 – 6 мая 2005 г., стр. 14).

Таким образом, кажется, что нет никакой гарантии, но она, вероятно, будет работать в большинстве реализаций. (Знаменитые последние слова…)

Чтобы ответить на ваш вопрос, вам нужен дополнительный fflush(stdout); после вызова printf() чтобы убедиться, что запрос появляется до того, как ваша программа попытается прочитать ввод. Чтение из stdin не fflush(stdout); для тебя.

Нет.

Нет. Вам нужно fflush (stdout); Многие реализации будут очищаться при каждой новой строке, когда они отправляют вывод на терминал.

Нет. Stdin / stdout буферизуются. Для того, чтобы буферизованные данные в памяти видеопамяти / unix-терминала были вытолкнуты на устройство просмотра, например терминал, необходимо выполнить fflush(stdout) . setvbuf данных может быть задана вызовом setvbuf .

Редактировать: Спасибо Jonathan, чтобы ответить на вопрос, чтение из stdin не сбрасывает stdout. Возможно, я setvbuf тангенс, указав код, демонстрирующий, как использовать setvbuf .

   #include 

   int main (void)
   {
      FILE * input, * output;
      char bufr [512];

      input = fopen ("file.in", "r + b");
      output = fopen ("file.out", "w");

      / * настроить stream ввода для минимального доступа к диску,
         используя наш собственный буфер символов * /
      if (setvbuf (input, bufr, _IOFBF, 512)! = 0)
         printf ("не удалось настроить буфер для входного файла \ n");
      еще
         printf («буфер настроен для входного файла \ n»);

      / * настроить выходной stream для буферизации строк, используя пространство, которое
         будет получен через косвенный вызов malloc * /
      if (setvbuf (вывод, NULL, _IOLBF, 132)! = 0)
         printf ("не удалось настроить буфер для выходного файла \ n");
      еще
         printf («буфер настроен для выходного файла \ n»);

      / * выполнить файл I / O здесь * /

      / * закрыть файлы * /
      fclose (вход);
      fclose (выход);
      return 0;
   }

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

Нет, это не часть стандарта. Конечно, возможно, что вы использовали реализацию библиотеки, где описанное вами поведение произошло, но это нестандартное расширение, на которое вы не должны полагаться.

Нет. Следите за взаимоблокирующими взаимоблокировками при работе со стд-streamами при чтении на stdin или записи на блоках stdout.

  • Как получить STDOUT из QProcess?
  • Является ли строка stdout буферной, небуферизованной или неопределенной по умолчанию?
  • Как сделать вывод любой команды оболочки без буфера?
  • Как перенаправить вывод обратно на экран после freopen («out.txt», «a», stdout)
  • Как подключить stdout, сохраняя его на экране? (а не выходному файлу)
  • Перенаправить stdout + stderr в службу Windows C #
  • Как подключить stderr, а не stdout?
  • python 3.0, как сделать print () вывод unicode?
  • Захват и stdout и stderr в Bash
  • Как сделать python 3 print () utf8
  • Сценарий Bash - хранить stderr в переменной
  • Interesting Posts

    Пользовательский Cursor Image CSS

    Автоматическое создание электронной почты с именем пользователя и случайным паролем при создании нового пользователя

    Сделайте снимок экрана всей веб-страницы в Opera

    Как форматировать строки, используя printf (), чтобы получить равную длину в выходе?

    Почему конструктор суперclassа вызывается, когда мы объявляем объект подclassа? (Ява)

    Как изменить изображение от декартовых координат до полярных координат в Matlab?

    Почему C # запрещает чтение только локальных переменных?

    Почему встроенные функции C ++ в заголовке?

    Есть ли asynchronous эквивалент Process.Start?

    Является ли токен устройства APNS когда-либо измененным?

    Восстановить базу данных mysql из файлов .frm

    Wildfly 9 http до https

    Ошибка Xcode при загрузке в App Store: «Не найдено подходящих записей приложений»

    Какую функцию hashирования использует Java для реализации classа Hashtable?

    Пользовательские сообщения об ошибках в сериализаторе Django Rest Framework

    Давайте будем гением компьютера.