Я начал использовать трубу для базового упражнения. Из процессов 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 s1; чтения (AC [0], & s1, SizeOf (INT)); '? –
действительно, я был не осторожен, чем вы – Darkmer