よくブロックされた読み取りを行う方法はないようです。エラービットをクリアすることは役に立ちません。のみ再オープンこの例のように、FIFOの:
int main(int argc, char **argv)
{
int rc=0;
enum FATAL {ERR_ARGV,ERR_OPEN_FILE};
try
{
if(argv[1] == NULL) throw ERR_ARGV;
std::ifstream fifo;
while(1)
{
fifo.open(argv[1],std::ifstream::in);
if(!fifo.is_open()) throw ERR_OPEN_FILE;
std::string line;
while(std::getline(fifo,line))
{
std::cout << line << "\n"; fflush(stdout);
}
fifo.close();
}
// never should come here
}
catch(FATAL e)
{
rc=e;
switch(e)
{
case ERR_ARGV:
std::cerr << "ERROR: argument 1 should be a fifo file name\n";
break;
case ERR_OPEN_FILE:
std::cerr << "ERROR: unabel to open file " << argv[1] << "\n";
break;
}
}
return(rc);
}
私はこのコードをテストしているし、それがFIFOから無限の読み取りを行うために動作します。
ありがとう、私はそれを試してみましょう。残念ながら、WindowsにBoostをインストールすることは、WinApiですべてを書き始めるだけで複雑になります;-)。 – jdm
MinGWを使用している場合は、このパッケージリポジトリ[Alexpux Packages](https://github.com/Alexpux/MINGW-packages)に基づいて 'packman'を使用してインストールすることができます。 – Yuki
Visual Studioには[これらのバイナリ](https://sourceforge.net/projects/boost/files/boost-binaries/1.64.0/)があります – Yuki