Я пытаюсь разделить массив между отцом и ребенком. Дочерний должен иметь доступ к значениям массива и получать обновления при изменении отцом. В качестве примера я написал следующее:
#define READ 0
#define WRITE 1
int main(){
int value[3];
int pip[2];
pipe(pip);
value[0] = 19;
value[1] = 20;
value[2] = 30;
write(pip[WRITE],value,sizeof(value));
fsync(pip[WRITE]);
if (fork() == 0){
int count = 100;
int v[3];
while(1){
sleep(1);
read(pip[READ], v, sizeof(v));
for (int i = 0 ; i < 3; i++){
printf("%d\n",v[i]);
}
printf("Done\n");
}
}else{
while(1){
wait(NULL);
sleep(2);
value[0] = 3;
value[1] = 4;
value[2] = 0;
printf("%d\n",value[0]);
write(pip[WRITE],value,sizeof(value)); //this doesn't work
fsync(pip[WRITE]);
}
}
}
Кажется, это делает канал неблокирующим (это функция, которая мне нужна), закрывая размер чтения и размер записи каждый раз. В любом случае напечатанные значения не обновлены отцом. Как решить эту проблему и почему так не работает?