1

子プロセスのstdinとstdoutのファイル記述子を次のようにリダイレクトしています。ここで、入力記述子でデータが利用可能になるまで子プロセスを待機させたいと思います。現在、入力記述子でデータが利用できない場合、子プロセスはランダムな値(おそらくEOF)を取り、終了します。

fd0=open("in1.dat", O_RDWR|O_CREAT);
fd1=open("out1.dat", O_RDWR|O_CREAT);
if(pid==0)
    {
    dup2(fd0, 0); // redirect input to the file
    dup2(fd1, 1); // redirect output to the file
    execlp("./flip","flip","new","4",NULL);
}
4

1 に答える 1

4

ファイル記述子からの読み取りは、データが利用可能になるまでブロックされます (読み取りが非ブロックになるように調整しない限り)。あなたの場合、ファイルが空の場合、読み取りは実際にファイルの終わりを示すために 0 を返し、バッファーには何も書き込みません (したがって、表示されているランダムな値は、読み取りを呼び出す前にあったものです)。入力ファイルをパイプとして扱いたい場合 (たとえば、他の誰かがファイルにデータを書き込むまで子プロセスを待機させたい場合) は、入力ファイルを通常のファイルではなく fifo にする必要があります。(たとえば、open の代わりに mknod を使用します。)

于 2011-05-09T18:17:36.697 に答える