C linux,从不同的进程读/写同一个文件,读进程得到了一些意外的数据

C linux,从不同的进程读/写同一个文件,读进程得到了一些意外的数据,c,linux,fwrite,fread,C,Linux,Fwrite,Fread,情景: 进程(A)以r+模式打开文件 进程(B)以r+模式打开同一文件 进程(A)将一些数据写入其中,然后fflush() 进程(A)通知进程(B)读取数据 进程(B)读取数据 必须刷新每个流,以确保流已准备好进行I/O。当您在流程(A)中打开流时,您将使用类似于: FILE *fpA = fopen (filename, "r+"); 然后在过程(B)中,你做了类似的事情: FILE *fpB = fopen (filename, "r+"); fpA和fpB都是filename的独立数据

情景:

  • 进程(A)以
    r+
    模式打开文件
  • 进程(B)以
    r+
    模式打开同一文件
  • 进程(A)将一些数据写入其中,然后
    fflush()
  • 进程(A)通知进程(B)读取数据
  • 进程(B)读取数据 必须刷新每个流,以确保流已准备好进行I/O。当您在流程(A)中打开流时,您将使用类似于:

    FILE *fpA = fopen (filename, "r+");
    
    然后在过程(B)中,你做了类似的事情:

    FILE *fpB = fopen (filename, "r+");
    

    fpA
    fpB
    都是
    filename
    的独立数据流。仅Flusing only process(A)的流对process(B)的流中的内容没有影响,反之亦然。因此,正确的方法是确保每个流都已刷新并准备好进行额外的I/O。

    所有文件处理函数都已读写缓冲。如果文件的某些部分已在缓冲区中,则不会再次从磁盘读取,而是从缓冲区返回-如果从另一个进程写入同一文件,则缓冲区将仅在该文件的fflush()之后更新。你可能想在谷歌上搜索文件锁定机制。发布你的代码。这样你就能得到真实的答案,而不是猜测。不是真的。这可能有点帮助,但想象一下这两个进程正在以非常相同的(毫秒/微秒)刷新。如果没有一个特定的锁定机制,总是会有一个小的不确定性槽,文件的某些部分已经写入,而某些部分没有写入,读取过程会读取一个半更新的文件。谢谢大家,我认为David是对的,而且,我需要一个锁定机制。