Can';t读取和打印管道内容(通过execv从子级执行)

Can';t读取和打印管道内容(通过execv从子级执行),c,pipe,execv,C,Pipe,Execv,我编写了一个程序,读取bash文件并执行该文件中的命令。我让执行部分工作,但我似乎无法将命令输出重定向到管道,然后从管道读取并打印其内容。我读过一些关于这个主题的话题,但解决方案似乎不起作用。这是密码 int main(int argc, char * argv[]) { int pipefd[2]; char buf[1024]; int bytes = 0; for (int i = 1; i < argc; i++) { // reading file as argume

我编写了一个程序,读取bash文件并执行该文件中的命令。我让执行部分工作,但我似乎无法将命令输出重定向到管道,然后从管道读取并打印其内容。我读过一些关于这个主题的话题,但解决方案似乎不起作用。这是密码

int main(int argc, char * argv[]) {

 int pipefd[2];
 char buf[1024];
 int bytes = 0;

 for (int i = 1; i < argc; i++) { // reading file as argument one at a time
   FILE * fp;
   fp = fopen(argv[i], "r");
   char * buffer = NULL;
   size_t buf_size = 0;
   char bufread[1024];
   int bytes_read = 0;

   while (getline( & buffer, &buf_size, fp) != EOF) {

       pid_t pid;
       pid = fork();

       pipe(pipefd);

       if (pid == 0) {
         close(pipefd[0]);
         dup2(pipefd[1], 1);
         dup2(pipefd[1], 2);
         close(pfd[1]);

         int length = countWords(buffer);

         char * init_argv[length + 2];
         init_argv[0] = "sh";
         init_argv[1] = "-c";
         init_argv[2] = buffer;
         init_argv[3] = NULL;

         execv("/bin/bash", init_argv);
       } else {

         int status;
         close(pfd[1]);
         waitpid(pid, & status, 0);

         while (read(pfd[0], bufread, sizeof(bufread)) != 0) {
           fprintf(stdout, "%s\n", bufread);
         }
       }

     }
   }
 }

 return 0;

}
intmain(intargc,char*argv[]){
int-pipefd[2];
char-buf[1024];
int字节=0;
对于(inti=1;i

当这个程序以包含命令作为参数的有效文件运行时,为什么没有任何输出?我知道在没有dup2和close指令的情况下,程序会执行命令,所以这不是问题所在。一旦我将dup2和close指令添加到程序中,我就无法再调试它(它在execv时崩溃)。

我不确定这是否是问题所在,但调用
管道(pipefd)不应该fork
之前执行code>


现在,我认为父级和子级各自创建了一个不同的管道,它们不能使用这些管道彼此通信,如果您想这样做的话。

我不确定这是否是问题所在,但调用
管道(pipefd)不应该这样做fork
之前执行code>

现在,我认为父级和子级各自创建了一个不同的管道,它们不能使用这些管道彼此通信,如果您希望这样做的话