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は常に正しいです。
scanfを呼び出す2つの異なるプロセスがあるように見えます。なぜ、もう一方を待つのだろう? –
うまくいきました。これら2つのプロセスに問題はありません。印刷順序(最初にprintfとscanfを見て親の次のものに移動したい場合)は、親に対して作業を行う前に子が終了するのを待つ必要があります。 –