2010-08-05 99 views
0

我试图打开当前进程的可执行文件的读写操作(我有附加到可执行文件的附加数据),但是std :: fstream不会打开文件在ios :: in | ios :: out | ios ::二进制模式,尽管open()会(设置O_RDWR标志)。std :: fstream不会打开当前进程的文件,但open()会?

有没有人知道为什么std :: fstream不会打开文件,而open()会,如果是的话,我如何获得std :: fstream来打开文件?

回答

1

它很可能与文件共享语义有关。请参阅this thread,它处理类似的问题 - 答案是“文件保护,文件共享,文件权限是OS特有的,这就是为什么它不被标准C++覆盖”的概念。

+0

是的,我怀疑我可能必须为它使用open(),read(),write()等编写自己的I/O类。这并不重要,因为我需要对每个块进行缓存,因为它是用于文件系统的。 – 2010-08-05 10:18:49

0

我不知道是否在某个地方引擎盖下,std::fstream版本号召open - 我敢打赌。您是否尝试过检查errno,或者运行strace以查看系统调用是否返回了错误?