У меня есть приложение, которое записывает относительно большие файлы (по сравнению с его вводом, а не с памятью системы) и тратит примерно 80% своего времени просто на запись вывода. Приложение также поддерживает параметр «-diff», который указывает ему не записывать файлы, а вместо этого сравнивать то, что оно будет записывать, с тем, что уже есть, и генерировать сообщение об ошибке, если есть разница. реализация опции -diff. Я открываю файл и использую fget c, чтобы читать его символ за символом, чтобы сравнивать символ за символом с тем, что я обычно пишу. Что-то вроде этого псевдокода (хотя реальный код намного сложнее, поскольку у меня есть разные вещи, в которых я хочу игнорировать различия:
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();
}
}
Мой профилирование показывает, что я большую часть времени провожу в fget c. Я полагаю, что имею дело с буферизацией. Я бы предпочел переносимый код, который выглядел бы так.
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 решаю сам.