2017-10-06 42 views
0

我对某个赋值代码有问题以熟悉进程和fork()系统调用。由于某些原因,当我在初始if语句中调用scanf()时,它不会立即等待输入,首先程序继续下一个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 

第3和4是用户输入的,所以它看起来像程序直行到第二scanf函数它看到后的第一个?进程ID始终是正确的。

+0

在我看来,有两个不同的进程调用scanf。为什么要等另一个? –

+0

它工作正常。这两个过程没有问题。对于打印顺序(如果您想要查看第一个printf&scanf并移至父级中的下一个),您需要等待孩子完成后才能开始处理父级。 –

回答

0

您在致电scanf之前分叉处理。这给你2个过程。这两个过程然后调用scanf,一个读数为“x”,另一个读数为“y”。他们都在等待用户输入,但是因为你有两个进程同时进行,你会得到两个消息。