是否有可移植的(Windows,Linux,MacOS,Android)打开内存映射文件的方式?

问题描述 投票:0回答:1

我有一个应用程序可以写入相对较大的文件(与输入相比,而不是与系统内存相比),并花费大约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问题。

c linux windows memory-mapped-files
1个回答
0
投票

[mmap]具有很高的可移植性,甚至可以通过以下端口使用Windows端口在Windows(我在MinGW-w64上进行了尝试)上运行:

© www.soinside.com 2019 - 2024. All rights reserved.