模組 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 不會解譯它們。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 位元(resp. 64 位元)平台上使用 OCaml 時,它為 31(resp. 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

浮點數陣列的最大長度。這也是當 OCaml 設定為 --enable-flat-float-arrayfloat 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 是任意字串。在 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