[英]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.