【发布时间】:2020-08-18 10:06:14
【问题描述】:
我想将一个网络数据包的缓冲区传递给 C。我已经知道如何为简单的 OCaml 类型执行此操作,但我不知道如何从这个 CStruct 库中传递一个缓冲区。
我正在使用的库使用https://github.com/mirage/ocaml-cstruct,我不知道为什么,但看起来它模仿了一个 C 结构,所以我想将它作为缓冲区传递给 C 应该很容易。
这是在我的代码中创建缓冲区的方式:
let buf = Cstruct.create size in
如果我们查看它的代码,它会调用https://github.com/mirage/ocaml-cstruct/blob/master/lib/cstruct.ml#L98,即
let buffer = Bigarray_compat.(Array1.create char c_layout len) in
{ buffer ; len ; off = 0 }
对于最新版本的 OCaml,Bigarray 只是标准库 Bigarray,它只是一个模块
include Stdlib.Bigarray
我找不到任何关于将 bigarray 作为可以读取的指针传递给 C 的信息。
【问题讨论】:
-
这和函数式编程有什么关系?
标签: functional-programming ocaml