Почему делает printf () не, печатают что-нибудь передо сном ()?

18
задан indiv 20 March 2017 в 18:38
поделиться

3 ответа

printf() записи к stdout (поток вывода по умолчанию), который обычно является буферизованной строкой. Буфер не сбрасывается, к этому времени sleep назван так, ничто не отображено, когда программа выходит, все потоки автоматически сбрасываются, который является, почему это печатает прямо перед выходом. Печать новой строки будет обычно заставлять поток быть сброшенным, альтернативно Вы могли использовать эти fflush функция:

int main(void)
{
  printf(" I like cows.\n");
  sleep(5);
  return 0;
}

или:

int main(void)
{
  printf(" I like cows.");
  fflush(stdout);
  sleep(5);
  return 0;
}

, Если Вы печатаете к потоку, который не является буферизованной строкой, как может иметь место, если stdout перенаправляется или Вы пишете в файл, просто печатение новой строки, вероятно, не будет работать. В таких случаях необходимо использовать fflush, если Вы хотите данные, записанные сразу.

35
ответ дан 30 November 2019 в 07:00
поделиться

Ваша проблема состоит в том, что printf (и что-либо еще, что пользуется stdio библиотекой для записи в stdout (стандартный вывод)) буферизуется - строка, буферизованная, если это переходит к консоли и размеру, буферизованному, если это переходит к файлу. Если Вы сделаете fflush(stdout); после эти printf, то это сделает то, что Вы хотите. Вы могли попытаться просто добавить новую строку ('\n') к Вашей строке, и это сделает правильную вещь, пока Вы не перенаправляете стандартный вывод в файл.

я не на 100% уверен, но я думаю stderr, не буферизуется, который может вызвать беспорядок, потому что Вы могли бы видеть, производит Вас сделанный к stderr, прежде чем произведено, Вы ранее сделали к stdout.

3
ответ дан 30 November 2019 в 07:00
поделиться

Буферизация средств, что весь вывод хранится в месте (названный буфером) и производится после определенного количества данных, присутствует в нем. Это сделано по причинам эффективности.

Некоторые (большинство?) реализации очищают буфер после новой строки при записи в консоль, таким образом, можно также попробовать

printf(" I like cows.\n");

вместо вызова для сбрасывания ()

4
ответ дан 30 November 2019 в 07:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: