C++ tellp与文件锁定一起使用安全吗

C++ tellp与文件锁定一起使用安全吗,c++,c,boost,file-locking,C++,C,Boost,File Locking,我认为,增强文件锁定(可共享和作用域文件锁定)和文件锁定的一般策略是: 打开 锁 对文件内容进行操作 解锁 关闭文件 但是,我将打开文件进行追加,并想调用tellp查看我的位置。在上述场景中这样做安全吗?文件指针不是在锁定之前打开文件后立即设置,因此可能不受保护吗?如果是这样的话,有没有一个标准的习语来解决这个问题 这可能是特定于环境的,但在大多数平台上: 打开文件进行追加时,文件指针将在每次写入之前立即调整。因此,如果您在锁定文件之前使用tellp,它可能不会告诉您新添加的字节将要去哪里,但您

我认为,增强文件锁定(可共享和作用域文件锁定)和文件锁定的一般策略是:

  • 打开
  • 对文件内容进行操作
  • 解锁
  • 关闭文件

  • 但是,我将打开文件进行追加,并想调用tellp查看我的位置。在上述场景中这样做安全吗?文件指针不是在锁定之前打开文件后立即设置,因此可能不受保护吗?如果是这样的话,有没有一个标准的习语来解决这个问题

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


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

    我推荐好的boost文档:

    您可以在其中阅读:

    • 文件锁不是操作系统锁,即使操作系统支持它(例如Windows是,Unix通常是否),所以如果锁定文件,任何人都可以读取/写入/删除它,除非其他进程使用相同的文件锁定机制。因此,更像是进程间互斥锁,而不是真正的文件锁
    • 文件锁用于进程间同步,它们不会同步进程内的多个线程
    • 不要忘记刷新(流的刷新),所以您不必担心缓冲
    哦,这太糟糕了。。。我想帮忙,我已经写了示例代码,尝试一下,然后。。。从1_44开始,win32的文件锁定被破坏,刷新在锁定的文件上不起作用

    对不起,不是我的错


    理论上,若它有帮助的话:若你们打开文件进行追加,这意味着在每次写操作之前自动寻找结束。它不会阻止您在任何时候手动寻求结束,即使没有编写。然而,经验(见上文)表明:远离破损的东西。

    我知道建议锁和强制锁之间的区别,以及线程的限制。这个问题假设这些问题已经解决了。如果是真的,这对我来说还是有点问题。我曾经担心的是,我希望每个人都打开文件进行附加,但是如果你打开文件进行附加,并且你在文件的开头写了一个头。@frankc:那么你需要锁定文件,然后调用
    tellp
    查看是否需要写头<锁定前的代码>tellp没有意义。