我已经开始用烟斗做基本练习了。从过程A和B我们得到2个随机数。进程C将这两个数字相加并打印出来。
问题是我没有从阅读中得到正确的值。在管道中输入的值不是退出的值。
这里有什么问题?
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main(){
int ac[2],bc[2];
int f,g;
if(pipe(ac)<0 || pipe(bc)<0){
perror("Pipe error");
exit(1);
}
f=fork();
if(f<0){
perror("Error fork1");
exit(2);
}
if(f==0){
g=fork();
if(g<0){
perror("Error fork2");
exit(3);
}
if(g==0){
printf("We are in A \n");
int variab=rand()%11+10;
printf("Here we found the number %d\n",variab);
write(ac[1],&variab,sizeof(int));
}
else{
wait(0);
printf("We are in B\n");
int variab2=rand()%6+5;
printf("Here we found the number %d\n",variab2);
write(bc[1],&variab2,sizeof(int));
}
}
else{
wait(0);
printf("We are in C\n");
int suma;
int s1=read(ac[0],&s1,sizeof(int));
printf("S1=%d\n",s1);
int s2=read(bc[0],&s2,sizeof(int));
printf("S2=%d\n",s2);
suma=s1+s2;
printf("Sum is %d\n",suma);
}
close(ac[0]);
close(ac[1]);
close(bc[0]);
close(bc[1]);
return 0;
}
最佳答案
问题在于线路
int s1=read(ac[0],&s1,sizeof(int));
...
int s2=read(bc[0],&s2,sizeof(int));
您正在用读取操作接收的字节数覆盖要获取的值。
确保不要通过拆分行为
s1
和s2
分配新值int s1;
read(ac[0],&s1,sizeof(int));
(与
s2
类似)它将工作。关于c - 管道未发送准确的信息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37373412/