繁体   English   中英

C 如何使用exec函数和管道获取其他程序的结果

[英]C How to get the result of other program with exec functions and pipes

我在 ca 程序中写道,父亲要求用户插入数字来计算数字的阶乘。 该数字是在 factorial.c 中计算的

所以我想我需要做的是:

- 父亲向用户询问一个号码:

-Factorial.c 读取数字并计算数字

-Factorial.c 写出计算出的数字

- 执行 dup2 以重定向输出

      // 2 Pipe and Fork created
      if(x == 0){ //Father

       close(p1[0]);
       write(p1[1],&number_by_keybord, BUFFER);
       close(p1[1]);
       close(p[1]);     

       dup2(p[0],0);  //Read the number returned by factorial.c
       read(p[0], &num_factorial,BUFFER);
       printf("Pipe: factorial %d\n", num_factorial);           
       close(p[0]);                 
       wait(NULL);

  }else{        
    execlp("./factorial", "factorial", NULL);
    perror("Exec error\n");
   }    

现在是 factorial.c

   void main(){
       read(0,&num,sizeof(int));

       //Number calculated

      write(1,&result,sizeof(int));
     return 0;
     }

但是当我执行程序时会冻结或只是放置一个随机数计算

dup2有什么问题吗? 我想检索正确的结果我必须做 dup2( , 0) 并且在阶乘中我需要读取和写入

谢谢!

很难猜测,因为您没有表现出足够的内容来复制您的问题,但是此代码中似乎存在问题:在 child (fork 返回 0 给child和 child pid 给parent )中,您正确地写入管道,并从其他管道读取管道,但在另一个进程中,您无法将管道重定向到 0 和 1 文件描述符。 你应该写:

...
}else{
    dup2(p1[0], 0);
    dup2(p[1], 1);
    execlp("./factorial", "factorial", NULL);
    perror("Exec error\n");
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM