一个文件上的O_APPEND标志使read()系统调用在其他文件

时间:2018-03-01 08:56:36

标签: c file-io posix

我有一个C程序,它在目录中创建指定数量的文件(name-myfiles)。然后删除所有文件。然后创建一个非常大的文件(名称-appfile),追加它,截断它。 上述几轮操作在循环中执行。

为了验证每个write,我从相同的偏移量中读取目标文件,其中它已经写入了数据。如果测试不对大文件使用O_APPEND标志,则此验证部分(read())非常顺利。但是,否则,读取开始显示奇怪的行为。完成第一轮测试后,读取的字节数为0或小于缓冲区大小或者如果字节数等于缓冲区大小而不是两个缓冲区的内容不匹配。

1 个答案:

答案 0 :(得分:2)

鉴于destflg=O_RDWR | O_APPEND | O_CREAT;,我假设有两件事:

  1. 您要以附加模式打开文件
  2. 你在Linux上运行。
  3. Linux上的

    pwrite()已经崩溃。

    来自the Linux pwrite() man page

      

    <强> BUGS

         

    POSIX要求打开带有O_APPEND标志的文件   对pwrite()写入数据的位置没有影响。但是,在          Linux,如果使用O_APPEND打开文件,pwrite()会附加数据          无论offset的值是什么,文件的结尾。