【发布时间】:2014-03-26 05:03:12
【问题描述】:
我在映射来自 OCaml 的本机 OSX 调用时遇到了一些问题,其中 c 调用需要传入缓冲区和大小。我已经研究了 Real World OCaml 中关于使用 CTypes 和 Foreign 的示例,但它们没有报道这个案子,或者至少我不清楚我会怎么做。
这是我的 OCaml 的 sn-p:
open Core.Std
open Unix
open Ctypes
open Foreign
(* from /usr/include/libproc.h
int proc_pidpath(int pid, void * buffer, uint32_t buffersize);
*)
let proc_pidpath = foreign "proc_pidpath" (int @-> ptr void @-> int @-> returning int)
let () =
let pid = Pid.to_int (Unix.getpid ()) in
let buf = allocate string 255 in
let path = proc_pidpath(pid, buf, 255) in
printf "Pid: %i Path: %s\n" pid buf
如何分配缓冲区以传递给proc_pidpath(),是否有更好的包装此调用的方法,使其返回选项类型(字符串或零)或仅返回字符串?
【问题讨论】: