2009-03-27 4 views
7

そのようなプログラムは、このいずれかになります。意味は、((int型*)0)このようにウェイト機能を使用しています

#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

サンプルコードだけがスレッドと関係している場合。 –

+0

@Sean - fork()コールが欠けましたか? – tvanfosson

+0

分かった。まだスレッドとは関係ありません。 –

答えて

3

stagerの答えは正しいです。標準に従って、ポインタコンテキストで使用される0はNULLポインタなので、キャストは完全に不要であることに注意してください。

11

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

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

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

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

関連する問題