写入该文件时,来自单个文件的多个缓冲输入流?

时间:2013-09-10 04:20:25

标签: c linux unix fopen

我正在处理一个排序问题,涉及排序大于主内存的文件。第一阶段生成一个中间文件,其大小与原始输入文件相同,但包含一些本地排序的子部分。

第二阶段将这些子部分合并为一个排序列表。

我没有创建第三个文件来包含单个排序列表,而是想覆盖我从读取的中间文件,因为我正在从中读取

此外,我想为每个输入流维护单独的读缓冲区(每个输入流都从一些偏移读取到中间文件中)。

我知道我可以使用fopen()和fseek()来创建多个缓冲的只读输入流。但是,fopen()的合同规定,如果文件已经存在,则以“w”模式在文件上调用它会将文件的大小设置为零。我需要它不要改变文件的大小,因为我还在多个地方读它。

使用fopen()&是否可以直接实现此目的FSEEK()?或者我是否需要使用open()并管理自己的读/写缓冲?

3 个答案:

答案 0 :(得分:2)

您可以在r+模式下打开文件,这意味着它可以读取和写入,并且不会截断文件。

答案 1 :(得分:1)

我首先建议您通过写入第三个文件来使您的程序正常工作。然后,如果条件要求您更新文件,则创建一个“简单”程序的副本,该程序可以使用并修改它。

这样,当您测试新程序时,您将能够将其与之前的工作结果进行比较。也就是说,最终简单程序和新程序都应生成相同的排序文件。

答案 2 :(得分:0)

阅读fopen(3)手册页。您可能需要"r+"模式。

或者,请考虑使用mmap(2)madvise(2)系统调用(没有任何<stdio.h>函数)