模組 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",則為 True。

val win32 : bool

如果 Sys.os_type = "Win32",則為 True。

val cygwin : bool

如果 Sys.os_type = "Cygwin",則為 True。

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

Socket 上的緊急情況

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 是任意字串。在 3.08.0 之前的版本中缺少 [.patchlevel] 部分,並且從 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