質問

このようにウェイト機能を使用してそのようなプログラムは、このいずれかです。

#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)のために発生したかどうかを確認します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top