C++同时控制另一个程序的I/O

发布于 2024-11-05 10:31:47 字数 571 浏览 6 评论 0原文

我在程序中控制 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 终端。

I'm controlling Gnuplot within my program for fitting and plotting; however, to get the fit parameters back, I want to use Gnuplot's print-function:

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);

I've read a lot about popen(), fork() and so on but the answers presented here or on other sites were either lacking a thorough explanation, not related to my problem or simply too hard to understand (I'm just beginning to program).

FYI: I'm using Linux, g++ and the usual gnome-terminal.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

情绪失控 2024-11-12 10:31:47

我找到了这个现成的答案: Can popen () 制作像 pipe() + fork() 这样的双向管道?

在您提供的 pfunc 中,您必须 dup2 作为<的参数接收的文件描述符code>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

我省略了任何错误检查。

I found this ready-to-use answer: Can popen() make bidirectional pipes like pipe() + fork()?

In the pfunc you supply, you have to dup2 the file descriptors received as arguments to stdin an stdout and then exec gnuplot, for example:

#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

I omitted any error checking.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文