親と子のプロセスがあり、親は子から出力を読み取り、子の入力に送信できます。これまでのところ、すべてがシェル スクリプトで正常に動作しており、データを入出力するコマンドをテストしています。簡単な C プログラムでテストしたところ、動作しませんでした。Cプログラムは次のとおりです。
#include <stdio.h>
int main( void ) {
char stuff[80];
printf("Enter some stuff:\n");
scanf("%s", stuff);
return 0;
}
C プログラムの問題は、select が子 fd からの読み取りに失敗し、プログラムを終了できないことです。選択を行うビットは次のとおりです。
//wait till child is ready
fd_set set;
struct timeval timeout;
FD_ZERO( &set ); // initialize fd set
FD_SET( PARENT_READ, &set ); // add child in to set
timeout.tv_sec = 3;
timeout.tv_usec = 0;
int r = select(FD_SETSIZE, &set, NULL, NULL, &timeout);
if( r < 1 ) { // we didn't get any input
exit(1);
}
これがシェルプログラムではなくCプログラムで発生する理由を知っている人はいますか?
編集:子プロセスが引数で exec を呼び出すことを指摘する必要があるため、その時点以降は子プロセスにアクセスできません。