Поделитесь массивом с безымянным каналом и сделайте канал неблокируемым в C - PullRequest
0 голосов
/ 01 августа 2020

Я пытаюсь разделить массив между отцом и ребенком. Дочерний должен иметь доступ к значениям массива и получать обновления при изменении отцом. В качестве примера я написал следующее:

#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]);
    }
  }
}

Кажется, это делает канал неблокирующим (это функция, которая мне нужна), закрывая размер чтения и размер записи каждый раз. В любом случае напечатанные значения не обновлены отцом. Как решить эту проблему и почему так не работает?

...