如何在 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, 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);
相关文章:
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- 在cuda线程之间共享大量常量数据
- 在c代码之间共享数据的最佳方式
- Mix_Init和Mix_OpenAudio SDL之间的区别是什么
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 大小相等但成员数量不同的结构之间的性能差异
- 类与私有变量的其他类之间的线程安全性
- 如何在cpp文件之间切换窗口?在Qt中
- 线程之间的布尔停止信号
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 在 const 函数中通过引用和指针返回之间的区别
- 我想知道长双倍和双倍之间的区别
- 如何在进程之间创建双向通道?
- 如何在 C++ 中建立进程之间的双向通道?
- Libssh2:在"每个线程的通道"基础上在线程之间共享 ssh 会话是否安全?
- 在C 和QML之间共享(Q)网络通道
- 图像深度和通道之间的差异