在OCaml中写入和读取内存映射文件
我正在OCaml中进行实验,以了解如何在内存映射文件中读取/写入数字数组 我想我需要使用Bigarray,但不确定如何将Bigarray数组写入内存映射文件,然后将其读回在OCaml中写入和读取内存映射文件,ocaml,memory-mapped-files,Ocaml,Memory Mapped Files,我正在OCaml中进行实验,以了解如何在内存映射文件中读取/写入数字数组 我想我需要使用Bigarray,但不确定如何将Bigarray数组写入内存映射文件,然后将其读回 我似乎在任何地方都找不到一个例子。我已经检查了Jane St.core的源代码,但没有结果。因为您似乎对使用core感兴趣: 这是他们文档中的map\u文件() map_文件共享fdn内存将与描述符fd关联的数据的n个字符映射到一个bigstring。如果shared为true,则对bigstring的所有更改都将反映在文件中
我似乎在任何地方都找不到一个例子。我已经检查了Jane St.core的源代码,但没有结果。因为您似乎对使用core感兴趣: 这是他们文档中的
map\u文件(
)
map_文件共享fdn内存将与描述符fd关联的数据的n个字符映射到一个bigstring。如果shared为true,则对bigstring的所有更改都将反映在文件中
不过,你应该接受乔纳森创造的答案。我只是在回答这个问题(我原本担心我没有抓住你的重点)。默认情况下,OCaml库为此提供了一种机制,即。它正是您想要的,相当于在Unix下对文件进行mmap
。我不确定Windows的具体细节
这样做的好处是得到了很好的支持和测试,如果您不需要JaneSt的Core,也不需要将它导入到您的项目中。
map\u file
?@Jonathan Protzenko:回答这个问题,它看起来很好。顺便说一下,将stdlib与核心代码混合使用通常是安全的吗?只要不使用异步,就应该是安全的。许多core模块都是相应stdlib模块的包装。查看core中的Caml
模块,它包装了整个stdlib,以备您需要使用。
val map_file : shared:bool -> Unix.file_descr -> int -> t