0

私のプログラムには、パイプで接続されたメイン ファイルとヘルパー ファイルがあります。メイン ファイルは stdin を介してヘルパー ファイルに書き込み、ヘルパーは stdout によってメイン ファイルに書き込みます。ヘルパー ファイルは、フォークによるメインの子プロセスであり、exec を実行します。標準入力から読み取っているときに、パイプが閉じているかどうかをヘルパーメソッドで確認するにはどうすればよいですか? 現在、私は以下のコードを使用していますが、stdin の EOF が ctrl-D であるため、無限ループに陥っています。これは、メイン関数がデータの文字列 (ほとんどの場合整数) のみを送信しているため発生しません。

while (1) {
                read(0, buffer, 20 );
                sscanf(buffer, "%d" , &info.numAgents);
                if (feof(stdin)) {
                        fprintf(stdout, "Handler communication breakdown.\n");
                        exit(4);
                }


        }
4

1 に答える 1

1

pipe(7) のマニュアルページから:

   If all file descriptors referring to the write end of a pipe have
   been closed, then an attempt to read(2) from the pipe will see end-
   of-file (read(2) will return 0). 

読み取り戻りコードを確認してください。

于 2013-09-26T13:51:05.097 に答える