tellp是否可以安全地使用文件锁定

时间:2011-01-12 20:39:52

标签: c++ c boost file-locking

我认为提升文件锁定(可共享和范围的file_locks)和文件锁定的一般策略是这样的:

  1. 对文件内容进行操作
  2. 解锁
  3. 关闭文件
  4. 但是,我将打开文件进行追加,并希望调用tellp来查看我的位置。在上述场景中这样做是否安全?一旦文件在锁定之前打开就不会设置文件指针,从而可能不受保护?如果是这样,有没有一个标准的习惯用来解决这个问题?

2 个答案:

答案 0 :(得分:1)

这可能是特定于环境的,但在大多数平台上:

当打开文件以追加时,在每次写入之前立即调整文件指针。因此,如果在锁定文件之前使用tellp,它可能不会告诉您新添加的字节将去哪里,但是您不应该使用锁定以某种方式仍然附加相同的字节范围。 / p>

答案 1 :(得分:0)

我推荐好的提升文档: http://www.boost.org/doc/libs/1_45_0/doc/html/interprocess/synchronization_mechanisms.html#interprocess.synchronization_mechanisms.file_lock

您可以在其中阅读:

  • 文件锁不是操作系统锁,即使操作系统支持它(例如Windows是,类似Unix通常没有),所以如果你锁定文件,任何人都可以读/写/删除它,除非其他进程使用相同的文件锁定机制。因此,将其视为进程间互斥而不是真正的文件锁。
  • 文件锁用于进程间同步,它们不会同步进程中的多个线程
  • 不要忘记冲洗(ofstream的冲洗),所以你不必担心缓冲

哦,这太可怕了......我想帮忙,我已经编写了示例代码,尝试了一下......从1_44文件锁定到win32时被破坏,刷新对锁定文件不起作用。

对不起,不是我的错。

如果它有帮助,理论上说:如果打开文件进行追加,则意味着在每次写入操作之前自动寻找结束。它并不会阻止你随时手动寻求结束 - 即使没有写作。然而,经验(见上文)说:远离破碎的东西。