首页 > 解决方案 > 学习如何使用 C 中的管道同步父进程和子进程的执行

问题描述

我有这个程序

int main()
{
  char *s, buf[1024];
  int ret, stat;
  s  = "Use for syncing\n";

  ret = fork();

  if (ret == 0)
  {
    printf("Child line 1\n");
    printf("Child line 2\n");
  } 
  else 
  {
    printf("Parent line 1\n");
    printf("Parent line 2\n");
    wait(&stat);
  }
}

该程序的输出当前是

Parent line 1
Parent line 2
Child line 1
Child line 2

但我需要更改代码以使子进程和父进程同步,因此所需的输出是:

Child line 1
Parent line 1
Child line 2
Parent line 2

我在概念上难以理解如何执行此操作,我知道何时ret = fork()调用它会返回一个不等于 0 的整数,因此,它将转到 if-else 的 else 部分,然后 ret 的值将变为 0进程成功返回后,将进入 if-else 的 if 部分。我尝试wait(&ret)在 else 语句中使用,以便程序等待ret返回 0,但这只会返回与当前输出相反的值。这就是我对同步的理解结束的地方,所以我坚持这一点。

谢谢

标签: csynchronizationpipe

解决方案


推荐阅读