将stdout传递给C程序

时间:2014-11-09 21:56:53

标签: c operating-system pipe fork system

我试图通过玩弄它来弄清楚C中的滚边。我想编写一个程序,它从shell命令'cat'获取输出,将其保存为字符串,然后打印该字符串。该命令应如下所示:

cat foo.txt | ./my_prog

我在将cat命令的输出发送到my_prog时遇到问题。这是我到目前为止所尝试的内容。

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

int main(int argc, char *argv[])
{
    int pipe_1[2];
    pid_t pid = -1;
    char catString[200];
    catString [199] = '\0';

    // dup stdout to pipe_1
    if( dup2(STDOUT_FILENO, pipe_1[1]) == -1 ){
            perror("Could not create pipe 1");
            exit(-1);
    }

    // fork a new process
    pid = fork();
    switch(pid){
    case -1:
            perror("Fork 1 failed");
            exit(-1);
    case 0: // child
            // close stdin and write stdout to the string
            close(pipe_1[0]);
            write(pipe_1[1], catString, 200);
            break;
    default: // parent
            // wait for child process to finish, close stdout, then print the string
            wait(NULL);
            close(pipe_1[1]);
            printf("Parent recieved %s\n", catString);
            break;
    }
return 0;
}

这不打印任何内容并给我输出:

  

家长收到了

另一方面,我是否正确使用了wait()函数?我想确保子进程在父进程执行之前写入catString。

1 个答案:

答案 0 :(得分:1)

shell会将cat foo.txt的输出发送到您程序的stdin。您无需对程序中的“管道”进行任何操作,只需按照shell提供的方式接受输入。