【发布时间】:2019-12-18 20:45:14
【问题描述】:
在我的项目中,我需要从 c++ 运行一个 php 脚本,将标准输入传递给它,然后选择标准输出。为此,我使用 fork() 创建子进程,使用 pipe() 打开管道,通过 dup2 重新分配 I/O 流,并使用 execlp() 运行脚本。我写了一个小程序进行测试,但是它不起作用,死机,等到子进程向通道写入一些东西,但是没有发生这种情况,我做错了什么?
cpp 代码
int main()
{
pid_t pid;
int pipe_in[2];
int pipe_out[2];
pipe(pipe_in);
pipe(pipe_out);
if ((pid = fork()) > 0)
{
close(pipe_in[0]);
close(pipe_out[1]); и
std::string msg = "hello world\n";
char buf[256];
write(pipe_in[1], msg.c_str(), msg.length());
read(pipe_out[0], buf, 255);
std::string temp = buf;
std::cout « temp;
}
else
{
close(pipe_in[1]);
close(pipe_out[0]);
dup2(pipe_in[0], 0);
dup2(pipe_out[1], 1);
if(execlp("php", "/home/anton/test1.php", NULL) < 0)
std::cout «"(((";
}
}
php代码
<?php
$line = trim(fgets(STDIN));
echo $line;
echo "11111";
?>
【问题讨论】: