我有一个C程序,它在目录中创建指定数量的文件(name-myfiles)。然后删除所有文件。然后创建一个非常大的文件(名称-appfile),追加它,截断它。在循环中执行几轮上述操作。
为了验证每个write
,我从相同的偏移量读取目标文件,在那里它已经写入了数据。如果测试不对大文件使用O_APPEND标志,则此验证部分(read())非常顺利。但是,否则,读取开始显示奇怪的行为。完成第一轮测试后,读取的字节数为0或小于缓冲区大小或者如果字节数等于缓冲区大小,则两个缓冲区的内容不匹配。
鉴于destflg=O_RDWR | O_APPEND | O_CREAT;
,我假设有两件事:
Linux上的pwrite()
已经崩溃了。
来自the Linux pwrite()
man page:
BUGS
POSIX要求使用
O_APPEND
标志打开文件应该对pwrite()
写入数据的位置没有影响。但是,在Linux上,如果使用O_APPEND
打开文件,pwrite()
会将数据附加到文件的末尾,而不管offset
的值是多少。