我正在解决一个排序问题,该问题涉及对大于主内存的文件进行排序。第一阶段生成一个中间文件,其大小与原始输入文件相同,但包含一些本地排序的子节。
第二阶段将这些子部分合并回一个排序列表。
我不想创建第三个文件来包含单个排序列表,我想覆盖我正在读取的中间文件,因为我正在从中读取。
此外,我想为每个输入流维护单独的读取缓冲区(每个都从某个偏移量读取到中间文件中)。
我知道我可以使用 fopen() 和 fseek() 创建多个缓冲的只读输入流。但是,fopen() 的合同规定,如果文件已经存在,则在“w”模式下对文件调用它会将文件的大小设置为零。我需要它来不改变文件的大小,因为我仍在多个地方读取它。
有没有使用 fopen() 和 fseek() 的简单方法来完成此操作?还是我需要使用 open() 并管理我自己的读/写缓冲?