Заставьте детей и родителей ждать друг друга бесконечное количество времени - PullRequest
0 голосов
/ 05 апреля 2020

Моя цель из кода заключается в следующем:
-Создайте случайное число между заданным диапазоном.
-Заставьте пользователя угадать число, используя дочерний процесс.
-Создайте, что родитель сообщает пользователю, если догадка должна быть выше / ниже.
-Если догадка верна, дать ребенку сигнал на выход.

Текущий код:

int main() {
  int randomnumber = 1 + rand() % 51;
  pid_t pid = fork();
  int fd[2];
  int fd2[2];
  pipe(fd);
  pipe(fd2);

  if (pid < 0) {
    printf("Fork failed");
  }

  if (pid == 0) {
    printf("Enter your guess: \n");
  }

  while (1) {

    if (pid == 0) {
      int sign;
      close(fd2[1]);
      read(fd2[0], &sign, sizeof(int));
      if (sign == 1)
        exit(0);
      int guess;
      scanf("%d", &guess);
      close(fd[0]);
      write(fd[1], &guess, sizeof(int));
    }

    if (pid > 0) {

      wait(NULL);

      int checker;
      close(fd[1]);
      read(fd[0], &checker, sizeof(int));

      if (checker > randomnumber) {
        printf("Guess should be lower");
      }

      if (checker < randomnumber) {
        printf("Guess should be higher");
      }

      wait(NULL);

      if (checker == randomnumber) {
        int signal = 1;
        close(fd2[0]);
        write(fd2[1], &signal, sizeof(int));
        printf("WIN");
        break;
      }
    }
  }
  return 1;
}

Мой текущий вывод:
"Введите ваше предположение:"
вводит его
Затем один из Печатные высказывания у родителей начинают выполняться бесконечно.

Как я могу синхронизировать оба способа так, чтобы каждый ожидал, пока другой достигнет своей цели?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...