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

时间:2016-03-28 07:52:48

标签: c linux fwrite fread

情景:

  1. 进程(A)以r+模式打开文件。
  2. 进程(B)以r+模式打开同一文件。
  3. 进程(A)将一些数据写入其中,并fflush()
  4. 过程(A)通知过程(B)读取数据。
  5. 进程(B)读取数据。 < ----这是问题。
  6. 在头部有一些意外的字节(0000 0000 ...),左边的字节是正确的

    PS:数据大小约为16k,我通过一次fwrite() / fread()来写/读它。

    我也做过测试,也就是说,如果在读取数据之前进程(B)调用fflush(),结果是正确的。

    我的问题是,

    1. 确保流程(B)始终能够正确的方法是什么 获取更新的数据?
    2. 由于流程(A)已经调用fflush(),为什么流程(B)也需要 在读取数据之前fflush()?

1 个答案:

答案 0 :(得分:0)

必须刷新每个以确保流已准备好进行I / O.当您在流程(A)中打开流时,您将使用类似于:

的内容
FILE *fpA = fopen (filename, "r+");

然后在过程(B)中你做了类似的事情:

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

fpAfpB都是filename的单独数据流。仅刷新进程(A)的流对进程(B)的流没有影响,反之亦然。因此,正确的方法是确保每个流都已刷新并准备好进行额外的I / O.