为什么不将execlp()打印输出到终端?

时间:2016-04-13 18:32:26

标签: c++ linux pipe unistd.h

我试图将子进程的输出链接到父进程的输入;父进程是使用子进程执行系统调用或命令。

我已经查看了以下主题的答案;但是,我找不到我想要的答案。

Pipe - C++ piping issue

Linux Pipes as Input and Output

我遇到的问题是父进程中的命令没有打印到终端。

为什么输出没有打印到终端?我已经在父进程和子进程中关闭了我的管道的末端。此外,父母的std_out未被修改。

这是我的代码。

#include <sys/types.h>
#include <sys/wait.h>  
#include <stdio.h>     
#include <stdlib.h>   
#include <unistd.h>     
#include <iostream>     

using namespace std;

int main(int argc, const char * argv[])
{
    enum {RD, WR};
    int fd[2];
    pid_t pid;

    if (pipe(fd) < 0)
        perror("pipe error");
    else if ((pid = fork()) < 0)
        perror("fork error");
    else if (pid == 0) { //In child process
        close(fd[RD]);
        dup2(fd[WR], STDOUT_FILENO);
        close(fd[WR]);
        execlp("/bin/ps", "ps", "-A", NULL);
    }
    else { //In parent process
        close(fd[WR]);
        dup2(fd[RD], STDIN_FILENO);
        close(fd[RD]);
        wait(NULL);
        execlp("/bin/wc", "wc", "-l", NULL);
    }
    return 0;
}

1 个答案:

答案 0 :(得分:0)

您不会检查execlp的失败。

您确定所有节目都在您认为的位置吗?如果我只是将"/bin/wc"更改为"/usr/bin/wc",那么您的计划适合我。