繁体   English   中英

c++中如何在进程间建立双向通道?

[英]How to establish a two-way channel between processes in c++?

我需要使用 C++ 启动 PHP 进程,为其提供标准输入,并在完成后获取标准输出。

我在这段代码中做错了什么?

#include <unistd.h>

int main()
{
        int fd[2][2];
        pipe(fd[0]);
        pipe(fd[1]);
        pid_t pid_fork = fork();
        if (!pid_fork) {
                close(fd[0][1]);
                close(fd[1][0]);
                dup2(fd[0][0], STDIN_FILENO);
                dup2(fd[1][1], STDOUT_FILENO);
                execl("php", "/home/test.php",  NULL);
        } else {
                close(fd[0][0]);
                close(fd[1][1]);
                char buf[1000];
                ssize_t sz;

                write(fd[0][1], "hello, world\n", sizeof("hello, world\n") - 1);
                close(fd[0][1]);
                sz = read(fd[1][0], buf, sizeof(buf));
                if (sz > 0) {
                        write(STDOUT_FILENO, buf, sz);
                }
        }
}

PHP:

<?php
$line = trim(fgets(STDIN));
echo $line;
?>

execl函数将找不到php因为它不在路径中搜索。 您必须使用 php 的完整路径,例如:

execl("/usr/bin/php", "/home/test.php", NULL);

或从 execl 更改为 execlp

execlp("php", "/home/test.php", NULL);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM