Как продолжать запускать код c после popen?

#c #console #pipe #gnuplot #popen

#c #консоль #канал #gnuplot #popen

Вопрос:

Я изучаю тему численного анализа и пытаюсь создать код с использованием c .

Сначала я хочу вызвать программу gnuplot и построить график функции. Но я сделал это с помощью функции popen.

И затем я вижу график и помещаю значение для одновременного вычисления решения проблемы.(Я потерпел неудачу.)

Проблема в том, что программа не продолжает работать после открытия программы gnuplot.

Как я могу продолжать запускать код c после использования popen?

Это код, который я сделал

 #define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <assert.h>
#include <cstring>
using namespace std;

//const char func1[30] = "(10*x)*sin(x*100)";

void plotFunction(char function[50], double x_min, double x_max);

char func1[30] = "sin(3*x)";
char func2[50] = "sinh(x)";

int main()
{
    
    plotFunction(func1, 0.0, 6.3);
    plotFunction(func2, -3, 3);
    cout << "process finished" << endl;

    return 0;
}


void plotFunction(char function[50], double x_min, double x_max)
{
    char range[100];
    char min[10]; char max[10];
    sprintf(min, "%f", x_min);
    sprintf(max, "%f", x_max);
    strcpy(range, "set xrange [");
    strcat(range, min);
    strcat(range, ":");
    strcat(range, max);
    strcat(range, "]n");
    
    char plot[200];
    strcpy(plot, "plot ");
    strcat(plot, function);
    strcat(plot, "n");
    

    FILE* plotHandle = NULL;

    if (plotHandle == NULL) {
        plotHandle = _popen("C:\Program" "Files\gnuplot\bin\gnuplot.exe -continue", "w");
        assert(plotHandle != NULL);
    }

    fprintf(plotHandle, "set terminal wxtn");
    fprintf(plotHandle, "set xlabel "X"n");
    fprintf(plotHandle, "set ylabel "Y"n");
    fprintf(plotHandle, range);
    fprintf(plotHandle, "set gridn");
    fprintf(plotHandle, "plot (10*x)*sin(x*100)n");
    fprintf(plotHandle, plot);
    //fflush(plotHandle);

    //_pclose(plotHandle);

}
  

Комментарии:

1. Я думаю, что ваша программа блокируется и ожидает завершения запущенного вами подпроцесса. Попробуйте что-нибудь более простое, что, как вы знаете, завершится. pubs.opengroup.org/onlinepubs/007904975/functions/popen.html чтобы проверить.

2. Что произойдет, если вы измените ‘-continue’ на ‘-persist’?