模块 Stdlib.Sys

module Sys: Sys

val argv : string array

传递给进程的命令行参数。第一个元素是用于调用程序的命令名称。后续元素是传递给程序的命令行参数。

val executable_name : string

包含当前正在运行的可执行文件的名称。此名称可以是绝对路径或相对于当前目录的路径,具体取决于平台以及程序是编译为字节码还是本地可执行文件。

val file_exists : string -> bool

测试是否存在具有给定名称的文件。

val is_directory : string -> bool

如果给定名称指的是目录,则返回 true,如果指的是其他类型的文件,则返回 false

val is_regular_file : string -> bool

如果给定名称指的是常规文件,则返回 true,如果指的是其他类型的文件,则返回 false

val remove : string -> unit

从文件系统中删除给定的文件名。

val rename : string -> string -> unit

重命名文件或目录。 rename oldpath newpath 重命名名为 oldpath 的文件或目录,将其新的名称设置为 newpath,如果需要,则在(父)目录之间移动它。如果名为 newpath 的文件已存在,则其内容将被 oldpath 的内容替换。根据操作系统,newpath 的元数据(权限、所有者等)可以保留或被 oldpath 的元数据替换。

val getenv : string -> string

返回与进程环境中变量关联的值。

val getenv_opt : string -> string option

返回与进程环境中变量关联的值,如果变量未绑定,则返回 None

val command : string -> int

执行给定的 shell 命令并返回其退出代码。

Sys.command 的参数通常是命令名称,后跟零个、一个或多个参数,用空格分隔。给定的参数由 shell 解释:对于 OCaml 的 Win32 端口,是 Windows shell cmd.exe,对于其他端口,是 POSIX shell sh。它可以包含 shell 内置命令,例如 echo,以及特殊字符,例如文件重定向 ><,这些字符将被 shell 识别。

相反,命令名称或其参数中出现的空格或特殊 shell 字符必须用引号括起来或转义,以使 shell 不对其进行解释。引号规则在 POSIX shell 和 Windows shell 之间有所不同。Filename.quote_command 根据命令名称、参数列表和可选的文件重定向执行适当的引用。

val time : unit -> float

返回程序自执行开始以来使用的处理器时间(以秒为单位)。

val chdir : string -> unit

更改进程的当前工作目录。

val mkdir : string -> int -> unit

使用给定的权限创建一个目录。

val rmdir : string -> unit

删除空目录。

val getcwd : unit -> string

返回进程的当前工作目录。

val readdir : string -> string array

返回给定目录中所有文件名称。不返回表示当前目录和父目录的名称(在 Unix 中为 ".""..")。结果中的每个字符串都是文件名,而不是完整路径。不能保证结果数组中的名称字符串将按任何特定顺序出现;特别是,不能保证它们将按字母顺序出现。

val interactive : bool ref

此引用最初在独立程序中设置为 false,如果代码在交互式顶级系统 ocaml 下执行,则设置为 true

val os_type : string

当前执行 OCaml 程序的操作系统。其中之一

  • "Unix"(对于所有 Unix 版本,包括 Linux 和 Mac OS X),
  • "Win32"(对于 MS-Windows,使用 MSVC++ 或 MinGW-w64 编译的 OCaml),
  • "Cygwin"(对于 MS-Windows,使用 Cygwin 编译的 OCaml)。
type backend_type = 
| 原生
| 字节码
| Other of string

目前,官方发行版仅支持 NativeBytecode,但它可以使用其他编译器作为其他后端,例如 javascript。

val backend_type : backend_type

当前执行 OCaml 程序的后端类型。

val unix : bool

如果 Sys.os_type = "Unix",则为真。

val win32 : bool

如果 Sys.os_type = "Win32",则为真。

val cygwin : bool

如果 Sys.os_type = "Cygwin",则为真。

val word_size : int

当前执行 OCaml 程序的机器上一个字的大小(以位为单位):32 或 64。

val int_size : int

int 的大小(以位为单位)。在 32 位(分别为 64 位)平台上使用 OCaml 时,它为 31(分别为 63)。对于其他实现,它可能有所不同,例如,在编译到 JavaScript 时,它可以为 32 位。

val big_endian : bool

当前执行 Caml 程序的机器是大端序还是小端序。

val max_string_length : int

字符串和字节序列的最大长度。

val max_array_length : int

普通数组(即元素类型不是 float 的任何数组)的最大长度。float array 的最大长度为 max_floatarray_length(如果 OCaml 使用 --enable-flat-float-array 配置),或者为 max_array_length(如果使用 --disable-flat-float-array 配置)。

val max_floatarray_length : int

floatarray 的最大长度。当 OCaml 使用 --enable-flat-float-array 配置时,这也是 float array 的最大长度。

val runtime_variant : unit -> string

返回程序正在运行的运行时变体的名称。这通常是在编译时传递给 -runtime-variant 的参数,但对于字节码,它可以在编译后更改。

val runtime_parameters : unit -> string

返回运行时参数的值,格式与 OCAMLRUNPARAM 环境变量的内容相同。

信号处理

type signal_behavior = 
| Signal_default
| Signal_ignore
| Signal_handle of (int -> unit)

收到信号时该怎么做

  • Signal_default:采用默认行为(通常:中止程序)
  • Signal_ignore:忽略信号
  • Signal_handle f:调用函数 f,并将其信号编号作为参数传递。
val signal : int -> signal_behavior -> signal_behavior

设置系统在收到给定信号时的行为。第一个参数是信号编号。返回先前与信号关联的行为。如果信号编号无效(或在您的系统上不可用),则会引发 Invalid_argument 异常。

val set_signal : int -> signal_behavior -> unit

Sys.signal 相同,但返回值被忽略。

标准 POSIX 信号的信号编号。

val sigabrt : int

异常终止

val sigalrm : int

超时

val sigfpe : int

算术异常

val sighup : int

控制终端上的挂起

val sigill : int

无效的硬件指令

val sigint : int

交互式中断(ctrl-C)

val sigkill : int

终止(不可忽略)

val sigpipe : int

管道破裂

val sigquit : int

交互式终止

val sigsegv : int

无效的内存引用

val sigterm : int

终止

val sigusr1 : int

应用程序定义的信号 1

val sigusr2 : int

应用程序定义的信号 2

val sigchld : int

子进程终止

val sigcont : int

继续

val sigstop : int

停止

val sigtstp : int

交互式停止

val sigttin : int

从后台进程读取终端

val sigttou : int

从后台进程写入终端

val sigvtalrm : int

虚拟时间中的超时

val sigprof : int

概要分析中断

val sigbus : int

总线错误

val sigpoll : int

可轮询事件

val sigsys : int

传递给例程的错误参数

val sigtrap : int

跟踪/断点陷阱

val sigurg : int

套接字上的紧急情况

val sigxcpu : int

cpu 时间中的超时

val sigxfsz : int

文件大小限制超出

exception Break

如果启用了 Sys.catch_break,则在交互式中断时引发的异常。

val catch_break : bool -> unit

catch_break 控制交互式中断(ctrl-C)是否终止程序或引发 Break 异常。调用 catch_break true 以启用引发 Break,并调用 catch_break false 以使系统在用户中断时终止程序。

在多线程程序内部,Break 异常将在任何一个活动线程中出现,并且在进一步的交互式中断时将继续出现,直到所有线程都终止。使用 Thread.sigmask 中的信号掩码将中断引导到特定线程。

val ocaml_version : string

ocaml_version 是 OCaml 的版本。它是一个格式为 "major.minor[.patchlevel][(+|~)additional-info]" 的字符串,其中 majorminorpatchlevel 是整数,additional-info 是任意字符串。[.patchlevel] 部分在 3.08.0 版本之前不存在,从 3.08.0 版本开始成为强制性。[(+|~)additional-info] 部分可能不存在。

val development_version : bool

如果这是开发版本,则为 true,否则为 false

type extra_prefix = 
| 加号
| 波浪号
type extra_info = extra_prefix * string 
type ocaml_release_info = {
   major : int;
   minor : int;
   patchlevel : int;
   extra : extra_info option;
}
val ocaml_release : ocaml_release_info

ocaml_release 是 OCaml 的版本。

val enable_runtime_warnings : bool -> unit

控制 OCaml 运行时系统是否可以在 stderr 上发出警告。目前,唯一支持的警告是在由 open_* 函数创建的通道在未关闭的情况下完成时触发的。运行时警告默认情况下处于禁用状态。

val runtime_warnings_enabled : unit -> bool

返回运行时警告当前是否已启用。

优化

val opaque_identity : 'a -> 'a

出于优化的目的,opaque_identity 的行为类似于未知(因此可能存在副作用)函数。

在运行时,opaque_identity 完全消失。

此函数的一个典型用法是防止在基准测试循环中优化掉纯计算。例如

      for _round = 1 to 100_000 do
        ignore (Sys.opaque_identity (my_pure_computation ()))
      done
    
module Immediate64: sig .. end