如何在 C++ 中建立进程之间的双向通道?

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

本文关键字:通道 之间 进程 C++ 建立      更新时间:2023-10-16

我需要使用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, worldn", sizeof("hello, worldn") - 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);