سؤال
واحد هذا البرنامج الذي يستخدم دالة الانتظار مثل هذا وهذا واحد:
#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.
نصائح أخرى
وwait((int *)0)
يدعو waitpid(-1, (int *)0, 0)
. دول الصفحة الرجل:
وإذا كانت حالة ليست فارغة، تنتظر () وwaitpid () مركز المعلومات مخزن في كثافة العمليات التي يشير.
اقتباس فقرة> وهنا، status
غير NULL (0). وبالتالي، مكالمتك إلى wait
ينتظر تغيير الدولة في أي عملية طفل، ولا تعود حالة. الدعوة مجرد يتحقق لمعرفة ما إذا حدث تغيير الدولة لعملية تابعة محددة (pid
في حالتك).
لا تنتمي إلى StackOverflow