Почему некоторые запущенные cmd процессы выводят блок / буфер при перенаправлении вывода? - PullRequest
3 голосов
/ 09 марта 2010

Почему некоторые процессы запускаются из командной строки на моей Windows машине, блокируют / буферизируют весь свой вывод, если он перенаправлен, а другие нет?

Пример: tracert не блокирует / буферизует вывод, как он записан. Если выполнить:

tracert ponyoverflow.com > output.txt

... файл output.txt со временем увеличивается. Это полностью, как я ожидал бы, что вещи будут вести себя.

Но я пытаюсь работать с программным продуктом потенциального поставщика ( iSpring SDK , если вам нужно знать), и он, похоже, буферизует весь вывод до завершения процесса. Что меня смущает, так это то, что когда это программное обеспечение запускается из командной строки, вывод происходит по частям, строка за строкой, как и ожидалось.

Почему существует разница в поведении между вызовом с перенаправлением вывода и без него?

Следите за различными вопросами:

  • Является ли это распространенным и / или стандартным в мире программирования командной строки Windows?
  • Могу ли я что-нибудь сделать, чтобы схватить
  • Как мне точно, на языке программиста Windows, сообщить людям iSpring, как, по моему мнению, их программное обеспечение должно вести себя в командной строке?

Я не уверен, насколько это важно, но все мои эксперименты происходят на 64-битной машине Windows 7 Home Premium.

1 Ответ

1 голос
/ 09 марта 2010

(ребята из iSpring гораздо быстрее отвечали на мои запросы, чем я мог мечтать. Сразу. Вот ответ на вопрос «почему» ниже.)

Стандартный вывод в C ++ буферизован по умолчанию. Размер буфера составляет около 4 КБ. Буфер очищается, когда приложение заканчивается. Данные, записанные на стандартный вывод, не буферизируются, когда стандартный вывод подключен к консоли.

...