質問
このようにウェイト機能を使用してそのようなプログラムは、このいずれかです。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int pid,fd[2]; int n; char line[20];
if(pipe(fd)<0) {
printf("Error creating pipe");
} else {
pid=fork();
if(pid<0) {
printf("Error while forking");
} else {
if(pid>0) {
close(fd[0]);
write(fd[1],"Hello\n",6);
while(wait((int *)0)!=pid);
} else {
close(fd[1]);
n=read(fd[0],line,20);
if(n<0)
printf("Error reading a file");
write(1,line,n);
}
}
}
return 0;
}
解決
ステージャーの答えは正しいです。標準に従って、ポインタの文脈で使用0がNULLポインタであるため、キャストが全く不要であることに留意されたい。
他のヒント
を参照してください。人待ち(2)のます。
wait((int *)0)
はwaitpid(-1, (int *)0, 0)
を呼び出します。 manページ状態:
ステータスがNULLでない場合は、、int型でのwaitpid()ストアステータス情報を(待つ)とにそれが指している。
ここで、status
がNULL(0)。したがって、wait
へのお電話は、すべての子プロセスの状態変化を待ち、およびステータスを返しません。呼び出しは、単に状態変化が特定の子プロセス(あなたのケースでpid
)のために発生したかどうかを確認します。
所属していません StackOverflow