/ tmp(* nixシステム上)でファイルを開き、その内容を読み取るC++プログラムがあります。
これを行うために、私は使用しています:
ofstream dest;
dest.open(abs_path.c_str(), ios::app);
ここで、abs_pathは、ファイルへの絶対パスを含む文字列です。
問題は、一部の*nixプログラムが/tmp内のファイルとして名前付きパイプを作成することです。例えば、
/tmp/vgdb-pipe-to-vgdb-from-23732-by-myusername-on-???
私が使用しているデバッグユーティリティによって作成されたパイプです。
ofstreamのドキュメント では、openメソッドは、ファイルを開くことが失敗したときにメソッドがエラービットを設定すると述べています。ただし、私のテストでは、代わりにファイル(実際にはパイプ)を無期限に開こうとしてハングします。これは、ファイルが別のプログラム(おそらくデバッガー)によってロックされているためだと思います。
では、どうすればofstream :: openを強制して有限時間ブロックすることができますか、それともまったくできませんか?失敗した場合に正常にクリーンアップするのは簡単ですが、実際には最初に失敗する必要があります。