名前付きパイプのバッファをポーリングする短いプログラムを書いています。テストするために、'nobody' にログインし、パイプにエコーします。ハングしている間に、別のユーザーからログインして、バッファーを読み取るプログラムを実行します。実行すると、プログラムは何も返さず、他のユーザーはシステムからログアウトされます。読み取り関数は次のとおりです。
void ReadOut( char * buf )
{
ZERO_MEM( buffer, BUF_SIZE );
int pipe = open( buf, O_RDONLY | O_NONBLOCK );
if( pipe < 0 )
{
printf( "Error %d has occured.\n" , pipe );
return;
}
while( read( pipe, buffer, 2 ) > 0 ) printf( "%s \n" , buffer );
close( pipe );
return;
}