我遇到了一些分配代码的问题,以熟悉进程和fork()系统调用。出于某种原因,当我在初始if语句中调用scanf()时,它不会立即等待输入,首先程序进入下一个scanf并等待输入。我知道有很多类似的任务,但我无法找到一个我的确切问题。
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
int main(){
pid_t pid;
int pipeid[2];
pid = fork();
if(pid >0){
int x;
printf("reading x from user: ");
scanf("%d", &x);
printf("display %d",x);
wait(0);
}
else{
int y;
printf("reading y from user: ");
scanf(" %d", &y);
printf("%d",y);
printf("parent proccess %d created child proccess %d\n", getppid(),getpid());
}
}
此程序的输出如下所示
reading x from user: reading y from user 3
4
4parentproccess (Ppid) created child process (pid)
display 3
前三个和第四个是用户输入,所以看起来程序在看到第一个扫描后直接进入第二个scanf?流程ID总是正确的。
答案 0 :(得分:0)
在致电scanf
之前,您正在分配流程。这为您提供了2个流程。然后两个进程都调用scanf
,一个读取“x”,另一个读取“y”。他们都在等待用户输入,但因为你有两个进程同时进行,所以你得到两个消息。