我正在解决一个排序问题,该问题涉及对大于主内存的文件进行排序。第一阶段生成一个中间文件,该文件的大小与原始输入文件的大小相同,但其中包含一些本地排序的子节。
第二阶段将这些小节合并回单个排序的列表中。
相反,创建第三个文件包含单一排序列表的我想覆盖中间文件我是从阅读,因为我从中读取。
另外,我想为每个输入流维护单独的读取缓冲区(每个缓冲区都从某个偏移量读取到中间文件中)。
我知道我可以使用fopen()和fseek()创建多个缓冲的只读输入流。但是,fopen()的约定规定,以“ w”模式在文件上调用它会将文件的大小设置为零(如果已存在)。我需要它不更改文件的大小,因为我仍在多个位置读取文件。
有没有一种简单的方法可以使用fopen()和fseek()完成此操作?还是我需要使用open()并管理自己的读/写缓冲?
我首先建议您通过写入第三个文件来使程序正常工作。然后,如果条件要求您更新文件,则创建可以运行的“简单”程序的副本并对其进行修改。
这样,当您测试新程序时,便可以将其与之前的有效结果进行比较。也就是说,最终,简单程序和新程序都应产生相同的排序文件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句