随机读取/写入一个大文件-每次读取/写入都产生mmap吗?

时间:2019-06-28 10:09:47

标签: linux kernel mmap

假设我有一个大文件1Go。我想在偏移量10处 READ 10ko,然后在偏移量235689处 WRITE 645ko,然后在偏移量648975处 READ 150Mo,依此类推...

这两者之间最好的方法是什么?

  • 打开文件并映射它(哪个大小?)。然后进行读/写。最后取消地图并关闭它。
  • 或打开文件。在读/写时,映射文件(大小是多少?),然后取消映射。最后关闭文件。

1 个答案:

答案 0 :(得分:2)

在每个I / O上执行mmap(1)听起来并不正确-这会使代码读取器和内核的优化感到困惑,并且没有好处。

如果要明确显示读写内容,可以使用pread(1)/ pwrite(1)或preadv(1)/ pwritev(1)。

如果没有,则可以mmap(1)整个文件(但请确保使用正确的标志,可能是MAP_SHARED)-Linux不会尝试将整个文件加载到内存中。