我试图通过玩弄它来弄清楚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。
答案 0 :(得分:1)
shell会将cat foo.txt
的输出发送到您程序的stdin
。您无需对程序中的“管道”进行任何操作,只需按照shell提供的方式接受输入。