[英]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.