如何在OCaml中检测系统类型/操作系统?
我目前的想法真的很奇怪。正在运行系统调用:"uname -a"
和
let syscall ?(env=[| |]) cmd =
let ic, oc, ec = Unix.open_process_full cmd env in
let buf1 = Buffer.create 96
and buf2 = Buffer.create 48 in
(try
while true do Buffer.add_channel buf1 ic 1 done
with End_of_file -> ());
(try
while true do Buffer.add_channel buf2 ec 1 done
with End_of_file -> ());
let exit_status = Unix.close_process_full (ic, oc, ec) in
check_exit_status exit_status;
(Buffer.contents buf1,
Buffer.contents buf2)
甚至在cygwin ......
但我想必须有一些原生的ocaml方式来检查系统类型。
答案 0 :(得分:5)
标准OCaml库有一个名为Sys.os_type
的字符串,但它不包含与uname -a
一样多的信息。它可以是"Unix"
,"Win32"
或"Cygwin"
。它在the manual entry for the Sys module中描述。
答案 1 :(得分:2)
注意,在extunix中还有一个wrapper for uname