在OCaml中写入和读取内存映射文件

时间:2014-01-04 15:14:29

标签: ocaml memory-mapped-files

我正在尝试在OCaml中查看如何在内存映射文件中读取/写入数值数组。

我想我需要使用Bigarray但不确定如何将Bigarray数组写入内存映射文件,然后再读回来?

我似乎无法在任何地方找到一个例子。我查看了Jane St.核心的源代码,但无济于事。

2 个答案:

答案 0 :(得分:4)

因为您似乎对使用核心感兴趣:

来自他们的文档(https://ocaml.janestreet.com/ocaml-core/109.58.00/doc/core/#Bigstring

map_file
val map_file : shared:bool -> Unix.file_descr -> int -> t
  

map_file shared fd n memory-mapping将与描述符fd关联的数据的n个字符映射到bigstring。 Iff共享是真的,对bigstring的所有更改都将反映在文件中。

你应该接受Jonathan创造的答案。

答案 1 :(得分:4)

我正在回答这个问题(我原本以为我错过了你的观点)。 OCaml库默认为此提供了一种机制,即map_file function from the Bigarray.Genarray module。它完全符合您的要求,相当于在Unix下mmap'文件。我不确定Windows的细节。

这样做的好处是得到了良好的支持和良好的测试,并且如果您不需要将JaneSt的Core导入到您的项目中,则不需要它。