用C管道两个shell命令

时间:2019-03-06 21:30:27

标签: c shell pipe fork

我试图通过C中的程序而不是使用命令行来执行grep -o colour colourfile.txt | wc -w > newfile.txt

这是我到目前为止所拥有的:

#include <stdlib.h>
#include <unistd.h>

int main (void) {
    int fd[2];

    pipe(fd);

    if (fork()) {
        // Child process
        dup2(fd[0], 0); // wc reads from the pipe
        close(fd[0]);
        close(fd[1]);
        execlp("wc", "wc", "-w", ">", "newfile.txt", NULL);
    } else {
        // Parent process
        dup2(fd[1], 1); // grep writes to the pipe
        close(fd[0]);
        close(fd[1]);
        execlp("grep", "grep", "-o", "colour", "colourfile.txt", NULL);
    }
    exit(EXIT_FAILURE);
}

1 个答案:

答案 0 :(得分:2)

  1. if (fork()) {的意思是parent process而不是child process,请参阅http://man7.org/linux/man-pages/man2/fork.2.html
  2. 您应该像使用>的{​​{1}}一样处理|

以下open()可以工作:

code