سؤال

واحد هذا البرنامج الذي يستخدم دالة الانتظار مثل هذا وهذا واحد:

#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). دول الصفحة الرجل:

<اقتباس فقرة>   

وإذا كانت حالة ليست فارغة، تنتظر () وwaitpid () مركز المعلومات مخزن في كثافة العمليات التي يشير.

وهنا، status غير NULL (0). وبالتالي، مكالمتك إلى wait ينتظر تغيير الدولة في أي عملية طفل، ولا تعود حالة. الدعوة مجرد يتحقق لمعرفة ما إذا حدث تغيير الدولة لعملية تابعة محددة (pid في حالتك).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top