簡體   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