我有一个应用程序可以写入相对较大的文件(与输入相比,而不是与系统内存相比),并花费大约80%的时间来简单地写入输出。该应用程序还支持“ -diff”选项,该选项告诉它不写文件,而是将它要写的内容与已经存在的内容进行比较,如果存在差异,则会生成错误消息。
在执行-diff选项时。我打开文件并使用fgetc逐个字符地读取它,以逐个字符地比较我通常会写的东西。像这样的伪代码(尽管实际代码要复杂得多,因为我有各种各样的东西要忽略差异:
void my_fputs(new_text, file_to_diff_to) {
for (c = *new_text; *c; ++c) {
x = fgetc(file_to_diff_to);
if (c != x) generated_error_message();
}
}
我的分析表明,我大部分时间都在fgetc中度过。我假设处理缓冲。我想要的是看起来像这样的可移植代码。
void my_fputs(new_text, file_to_diff_to) {
for (c = *new_text; *c; ++c) {
x = *file_to_diff_to;
if (c != x) generated_error_message();
++file_to_diff_to;
}
}
是否有相对便携式的工具可以让我做到这一点?如果有关系,我将以二进制(不是文本模式)读取文件。我自己处理cr / lf问题。
[mmap
]具有很高的可移植性,甚至可以通过以下端口使用Windows端口在Windows(我在MinGW-w64上进行了尝试)上运行: