模块 Sys

module Sys: sig .. end

系统接口。

此模块中的每个函数在底层系统调用发出错误信号时都会引发 Sys_error,并带有提示性消息。


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 的任何数组)的最大长度。如果 OCaml 使用 --enable-flat-float-array 配置,则 float array 的最大长度为 max_floatarray_length;如果使用 --disable-flat-float-array 配置,则为 max_array_length

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