我正在编写一个程序,父亲要求用户插入数字来计算数字的阶乘。该数字在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)和因子我需要读取和写入
谢谢!
答案 0 :(得分: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");
}