截断已被boost :: interprocess锁定的现有fstream

时间:2012-03-06 17:36:15

标签: c++ winapi filesystems posix boost-interprocess

如果我使用fstream标记重新打开包含数据的std::ios::trunc而未关闭流程,而我的流程持有boost::interprocess::file_lock()会怎样?

我是否应该期望操作系统维护我的文件锁定?或者,当文件关闭时,操作系统是否会透明地取消注册锁定? Windows和POSIX都将受到赞赏。

修改

我的主要目标是截断配置文件并重写它。该文件的第二个目的是防止其他等效守护进程启动。所以,如果有另一种方法使用boost或c ++ stl截断文件而不关闭它,我全都听见了:D

1 个答案:

答案 0 :(得分:0)

根据经验:使用std::fstream::close后跟std::fstream::open重新打开文件将透明地删除锁定(使用linux命令lsof测试),执行此操作后需要重新获取锁定使用boost::interprocess

所以,只要你按照open-file后跟acquire-lock,你应该没问题。

您可能希望在Windows中运行相同的测试。