7

このような待機関数を使用するプログラムの 1 つに、次のものがあります。

#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; 
}   
4

2 に答える 2

13

man wait(2)を参照してください。

wait((int *)0)を呼び出しますwaitpid(-1, (int *)0, 0)。マニュアルページには次のように記載されています。

status が NULL でない場合、wait() と waitpid() はステータス情報を、それが指す int に格納します。

ここでstatusは NULL (0) です。したがって、 への呼び出しwaitは、子プロセスの状態変化を待機し、ステータスを返しません。pid呼び出しは、特定の子プロセス(あなたの場合)の状態変更が発生したかどうかを確認するだけです。

于 2009-03-27T14:38:51.087 に答える
1

ステージャーの答えは正しいです。標準によれば、ポインターコンテキストで使用される 0 は NULL ポインターであるため、キャストはまったく不要であることに注意してください。

于 2009-03-27T14:44:58.500 に答える