гонка между детским и родительским процессом? - PullRequest
0 голосов
/ 10 апреля 2020

этот код печатает 1 из 2: - "HiByeHi" - "" (ничего), почему это происходит? это из-за гонки?

1.    void transfer() {// transfer chars from STDIN to STDOUT
2.      char c;
3.      ssize_t ret = 1;
4.      while ((read(0, &c, 1) > 0) && ret > 0)
5.           ret = write(1, &c, 1);
6.      exit(0);
7.    }
8.     
9.    int main() {
10.  int my_pipe[2];
11.  close(0);
12.  printf("Hi");
13.  pipe(my_pipe);
14.  if (fork() == 0) { // son process
15.       close(my_pipe[1]);
16.       transfer();
17.  }
18.  close(1);
19.  dup(my_pipe[1]);
20.  printf("Bye");
21.  return 0;
}
...