Рассмотрим эту небольшую программу, которая будет скомпилирована как application.exe
#include <stdio.h>
int main()
{
char str[100];
printf ("Hello, please type something\n");
scanf("%[^\n]s", &str);
printf("you typed: %s\n", str);
return 0;
}
Теперь я использую этот код для запуска application.exe
и получения его вывода.
#include <stdio.h>
#include <iostream>
#include <stdexcept>
int main()
{
char buffer[128];
FILE* pipe = popen("application.exe", "r");
while (!feof(pipe)) {
if (fgets(buffer, 128, pipe) != NULL)
printf(buffer);
}
pclose(pipe);
return 0;
}
Моя проблема в том, что выхода нет, пока я не сделал свой ввод. Затем извлекаются обе выходные линии.
Я могу решить эту проблему, добавив эту строку после первого оператора printf
.
fflush(stdout);
Затем первая строка извлекается, прежде чем я сделаю ввод, как ожидалось.
Но, как я могу получить вывод приложений, которые я не могу изменить, и которые не используют fflush()
в "реальном времени" (значит, до их выхода)?,
И как это делает windows cmd?