我在我的程序中控制Gnuplot进行拟合和绘图;但是,为了获得拟合参数,我想使用Gnuplot的打印功能:
FILE *pipe = popen("gnuplot -persist", "w");
fprintf(pipe, "v(x) = va_1*x+vb_1\n");
fprintf(pipe, "fit v(x) './file' u 1:2 via va_1,vb_1 \n")
fprintf(pipe, "print va_1"); // outputs only the variable's value as a string to
// a new line in terminal, this is what I want to get
...
pclose(pipe);
我已经阅读了很多关于popen()
,fork()
等等的内容,但是这里或其他网站上的答案要么缺乏透彻的解释,与我的问题无关,要么太难以解决明白(我刚刚开始编程)。
仅供参考:我正在使用Linux,g ++和通常的gnome-terminal。
答案 0 :(得分:4)
我找到了这个随时可用的答案:Can popen() make bidirectional pipes like pipe() + fork()?
在您提供的pfunc
中,您必须dup2
收到的文件描述符作为stdin
和stdout
以及exec
gnuplot的参数,例如:
#include <unistd.h>
void gnuplotProcess (int rfd, int wfd)
{
dup2( STDIN_FILENO, rfd );
dup2( STDOUT_FILENO, wfd );
execl( "gnuplot", "gnuplot", "-persist" );
}
int fds[2];
pid_t gnuplotPid = pcreate(fds, gnuplotProcess);
// now, talk with gnuplot via the fds
我省略了任何错误检查。