gpt4 book ai didi

c - 将标准输出传递给 C 程序

转载 作者:行者123 更新时间:2023-11-30 15:27:50 25 4
gpt4 key购买 nike

我试图通过尝试来弄清楚 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;
}

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

Parent recieved

顺便说一句,我是否正确使用了 wait() 函数?我想确保子进程在执行父进程之前已完成对 catString 的写入。

最佳答案

shell 会将 cat foo.txt 的输出发送到程序的 stdin。您不必对程序内的“管道”执行任何操作,只需按照 shell 传递输入的方式接受输入即可。

关于c - 将标准输出传递给 C 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26833780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com