如何检测运行的操作系统?

时间:2012-01-23 04:56:36

标签: ocaml

如何在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方式来检查系统类型。

2 个答案:

答案 0 :(得分:5)

标准OCaml库有一个名为Sys.os_type的字符串,但它不包含与uname -a一样多的信息。它可以是"Unix""Win32""Cygwin"。它在the manual entry for the Sys module中描述。

答案 1 :(得分:2)

注意,在extunix中还有一个wrapper for uname