我有一个 C++ 程序,它在 /tmp 中打开文件(在 *nix 系统上)并读取它们的内容。
为此,我正在使用:
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 在有限的时间内阻塞,或者根本不阻塞?如果它失败了很容易优雅地清理它,但它需要首先真正失败..