首页 > 解决方案 > C中的fork():从1数到1000

问题描述

我想我非常接近,但这里缺少一些细节。

任务:用 C 语言编写一个程序,创建父进程和子进程。父亲和孩子都在“使用”循环从 1 数到 1000。父进程只计算偶数,子进程只计算奇数。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>


void main (){

int id = fork();
int i;

if (id == 0){

    for (i=1;i<=1000;i=i+2){
    printf("%d\n",i);
    }
}

if (id >  0){

    for (i=0;i<=1000;i=i+2){
    printf("%d\n",i);
    wait(0);
    }
  }
}

我在这里遇到的问题是,所有数字都完全混淆了。看来我的等待系统调用无法正常工作:(感谢任何帮助。提前致谢:)

标签: cprocessfork

解决方案


Your wait system call should placed out of for loop, because there's only one child process to wait.
like that 

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <sys/wait.h>
    
    
    void main (){
    
    int id = fork();
    int i;
    
    if (id == 0){
    
        for (i=1;i<=1000;i=i+2){
        printf("%d\n",i);
        }
    }
    
    if (id >  0){
    
        for (i=0;i<=1000;i=i+2){
        printf("%d\n",i);
       
        }
        wait(0);
      }
    }

推荐阅读