Странное взаимодействие между popen () и printf vs. cout в C ++ - PullRequest
3 голосов
/ 27 октября 2011

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

У меня есть программа X, написанная на C ++ с использованием boost-1,41.Если X выводит с std::cout, то запуск X из другой программы с использованием fp=popen("X", "r") позволяет выводить X через fgets(buff, 1024, fp).

Теперь, если я изменю Xчтобы использовать printf() вместо std::cout, вывод X больше не виден.Тем не менее, выполнение X из bash дает ожидаемый результат.

Что может объяснить эту разницу ?!Я подозреваю, что здесь происходит повышение, но я не знаю много о повышении.

Примечание: Я счастлив придерживаться std::cout, и моя проблема решена.Но я пытаюсь понять, в чем проблема с printf().

1 Ответ

3 голосов
/ 27 октября 2011

Причина в том, что вы, вероятно, использовали std::endl с std::cout. Это, в дополнение к написанию символа новой строки, также очищает выходной буфер.

Чтобы сделать то же самое с printf, вы можете просто добавить fflush(stdout); после вызова.

...