Я хочу сделать некоторые графики в реальном времени во время моделирования. Для этого я хотел бы использовать октаву или gnuplot. Мой текущий подход заключается в использовании интерфейса для gnuplot, feedgnuplot, который очень хорошо подходит.вызов gnuplot через fork and pipe и график обновления
Моделирование написано на C++, поэтому я подумал о forking (новый процесс для feedgnuplot) и передал соответствующие данные в feedgnuplot.
Проблема у меня в том, что выход отображается только после симуляции. Но я хочу увидеть сюжет, обновленный во время симуляции.
Вот MWE:
#define _GNU_SOURCE
#include <stdio.h>
#include <unistd.h>
int main()
{
FILE* stream = popen("feedgnuplot", "w");
for(int i = 0; i < 10; ++i)
{
fprintf(stream, "%d\n", i * i);
fflush(stream);
sleep(1);
}
}
Программа останавливается после 10 secons, показывающий сюжет.
При использовании feedgnuplot
непосредственно в оболочке все работает должным образом. (То есть, новые данные выводятся без необходимости завершения процесса)
Что я делаю неправильно? Я думаю, что мне не хватает понимания того, как работает Popen.
Спасибо! Я нашел способ сделать feedgnuplot (программа, не написанная мной) вести себя так, как я хочу: '... | feedgnuplot --stream'. – pschulz