2017-10-06 8 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を呼び出す2つの異なるプロセスがあるように見えます。なぜ、もう一方を待つのだろう? –

+0

うまくいきました。これら2つのプロセスに問題はありません。印刷順序(最初にprintfとscanfを見て親の次のものに移動したい場合)は、親に対して作業を行う前に子が終了するのを待つ必要があります。 –

答えて

0

あなたはscanfに電話する前にプロセスをフォークしています。これは2つのプロセスを提供します。どちらのプロセスも、scanfを呼び出し、一方は「x」を示し、他方は「y」を示します。両方ともユーザーの入力を待っていますが、同時に2つのプロセスがあるので、両方のメッセージが表示されます。

関連する問題