Sys(3)
πΈ NAME πΈ
Sys β System interface. This is the Sys(3) page from the OCaml library, and bestie, it's literally giving system-interface realness. π
π Module π
Module Sys
β¨ Documentation β¨
Module Sys : sig end
System interface. π
Every function in this module raises Sys_error with an informative message when the underlying system call signals an error. So if the system goes sideways, that's the error you'll be seeing, iykyk. π«Ά
val argv : string arrayβ The command line arguments given to the process. The first element is the command name used to invoke the program. The following elements are the command-line arguments given to the program. πval executable_name : stringβ The name of the file containing the executable currently running. This name may be absolute or relative to the current directory, depending on the platform and whether the program was compiled to bytecode or a native executable. β¨val runtime_executable : stringβ The name of the file containing the runtime currently running. For native code, this is alwaysSys.executable_name, but in bytecode it may beocamlrun, for example. This name may be absolute or relative to the current directory, depending on the platform (Linux, Windows and macOS should all return absolute paths). Since 5.5 π¦val file_exists : string -> boolβ Test if a file with the given name exists. π₯val is_directory : string -> boolβ Returnstrueif the given name refers to a directory,falseif it refers to another kind of file. Since 3.10 RaisesSys_errorif no file exists with the given name. πval is_regular_file : string -> boolβ Returnstrueif the given name refers to a regular file,falseif it refers to another kind of file. Since 5.1 RaisesSys_errorif no file exists with the given name. πΈval remove : string -> unitβ Remove the given file name from the file system. π§val rename : string -> string -> unitβ Rename a file or directory.rename oldpath newpathrenames the file or directory calledoldpath, giving itnewpathas its new name, moving it between (parent) directories if needed. If a file namednewpathalready exists, its contents will be replaced with those ofoldpath. Depending on the operating system, the metadata (permissions, owner, etc) ofnewpathcan either be preserved or be replaced by those ofoldpath. Since 4.06 concerning the "replace existing file" behavior π₯val getenv : string -> stringβ Return the value associated to a variable in the process environment. RaisesNot_foundif the variable is unbound. πval getenv_opt : string -> string optionβ Return the value associated to a variable in the process environment orNoneif the variable is unbound. Since 4.05 πval command : string -> intβ Execute the given shell command and return its exit code. The argument ofSys.commandis generally the name of a command followed by zero, one or several arguments, separated by whitespace. The given argument is interpreted by a shell: either the Windows shellcmd.exefor the Win32 ports of OCaml, or the POSIX shellshfor other ports. It can contain shell builtin commands such asecho, and also special characters such as file redirections>and<, which will be honored by the shell. Conversely, whitespace or special shell characters occurring in command names or in their arguments must be quoted or escaped so that the shell does not interpret them. The quoting rules vary between the POSIX shell and the Windows shell. TheFilename.quote_commandperforms the appropriate quoting given a command name, a list of arguments, and optional file redirections. πval time : unit -> floatβ Return the processor time, in seconds, used by the program since the beginning of execution. βval chdir : string -> unitβ Change the current working directory of the process. π¦val mkdir : string -> int -> unitβ Create a directory with the given permissions. Since 4.12 πval rmdir : string -> unitβ Remove an empty directory. Since 4.12 πΈval getcwd : unit -> stringβ Return the current working directory of the process. β¨val readdir : string -> string arrayβ Return the names of all files present in the given directory. Names denoting the current directory and the parent directory ("."and".."in Unix) are not returned. Each string in the result is a file name rather than a complete path. There is no guarantee that the name strings in the resulting array will appear in any specific order; they are not, in particular, guaranteed to appear in alphabetical order. πval io_buffer_size : intβ Size of C buffers used by the runtime system and IO primitives of the unix library. Primitives that read from or write to values of typestringorbytesgenerally use an intermediate buffer of this size to avoid holding the domain lock. Since 5.4 π«Άval interactive : bool refβ This reference is initially set tofalsein standalone programs and totrueif the code is being executed under the interactive toplevel systemocaml.
Alert unsynchronized_access. The interactive status is a mutable global state. π
val os_type : stringβ Operating system currently executing the OCaml program. One of:"Unix"(for all Unix versions, including Linux and Mac OS X),"Win32"(for MS-Windows, OCaml compiled with MSVC++ or MinGW-w64),"Cygwin"(for MS-Windows, OCaml compiled with Cygwin). π
type backend_type
type backend_type =
| Native
| Bytecode
| Other of string
Currently, the official distribution only supports Native and Bytecode, but it can be other backends with alternative compilers, for example, javascript. Since 4.04 π₯
val backend_type : backend_typeβ Backend type currently executing the OCaml program. Since 4.04 πval unix : boolβ True ifSys.os_type = "Unix". Since 4.01 πval win32 : boolβ True ifSys.os_type = "Win32". Since 4.01 πval cygwin : boolβ True ifSys.os_type = "Cygwin". Since 4.01 πval word_size : intβ Size of one word on the machine currently executing the OCaml program, in bits:32or64. βval int_size : intβ Size ofint, in bits. It is31(resp.63) when using OCaml on a 32-bit (resp. 64-bit) platform. It may differ for other implementations, e.g. it can be32bits when compiling to JavaScript. Since 4.03 πΈval big_endian : boolβ Whether the machine currently executing the Caml program is big-endian. Since 4.00 π¦val max_string_length : intβ Maximum length of strings and byte sequences. πval max_array_length : intβ Maximum length of a normal array (i.e. any array whose elements are not of typefloat). The maximum length of a float array ismax_floatarray_lengthif OCaml was configured with--enable-flat-float-arrayandmax_array_lengthif configured with--disable-flat-float-array. π₯val max_floatarray_length : intβ Maximum length of afloatarray. This is also the maximum length of a float array when OCaml is configured with--enable-flat-float-array. πval runtime_variant : unit -> stringβ Return the name of the runtime variant the program is running on. This is normally the argument given to-runtime-variantat compile time, but for byte-code it can be changed after compilation. Since 4.03 β¨val runtime_parameters : unit -> stringβ Return the value of the runtime parameters, in the same format as the contents of theOCAMLRUNPARAMenvironment variable. Since 4.03 πval poll_actions : unit -> unitβ Run any pending runtime actions, such as minor collections, major GC slices, signal handlers, finalizers, or memprof callbacks. Since 5.3 π«Ά
π¦ Signal handling π¦
type signal = int
The type for signal numbers. Negative numbers are used by OCaml to provide a platform-independent number for signals recognised by OCaml. Positive numbers are always the platform-dependent value for a given signal. The function Sys.signal_of_int converts known platform-dependent numbers to independent ones, and Sys.signal_to_int does the reverse. Since 5.4 π
type signal_behavior
type signal_behavior =
| Signal_default
| Signal_ignore
| Signal_handle of (signal -> unit)
What to do when receiving a signal:
Signal_default: take the default behavior (usually: abort the program) πSignal_ignore: ignore the signal πSignal_handle f: call functionf, giving it the signal number as an argument. πval signal : signal -> signal_behavior -> signal_behaviorβ Set the behavior of the system on receipt of a given signal. The first argument is the signal number. Return the behavior previously associated with the signal. If the signal number is invalid (or not available on your system), anInvalid_argumentexception is raised. If a platform-dependent signal number is used, it will be converted to a platform-independent signal usingSys.signal_of_intbefore calling the handler. π₯val set_signal : signal -> signal_behavior -> unitβ Same asSys.signalbut the return value is ignored. π
π Signal numbers for the standard POSIX signals. π
val sigabrt : signalβ Abnormal termination πval sigalrm : signalβ Timeout β°val sigfpe : signalβ Arithmetic exception π₯val sighup : signalβ Hangup on controlling terminal π¦val sigill : signalβ Invalid hardware instruction πval sigint : signalβ Interactive interrupt (ctrl-C) πval sigkill : signalβ Termination (cannot be ignored) πval sigpipe : signalβ Broken pipe π§val sigquit : signalβ Interactive termination πΈval sigsegv : signalβ Invalid memory reference πval sigterm : signalβ Termination π«Άval sigusr1 : signalβ Application-defined signal 1 βval sigusr2 : signalβ Application-defined signal 2 βval sigchld : signalβ Child process terminated πval sigcont : signalβ Continue πval sigstop : signalβ Stop (cannot be caught or ignored) πval sigtstp : signalβ Interactive stop π¦val sigttin : signalβ Terminal read from background process πval sigttou : signalβ Terminal write from background process πval sigvtalrm : signalβ Timeout in virtual time β°val sigprof : signalβ Profiling interrupt π₯val sigbus : signalβ Bus error Since 4.03 πval sigpoll : signalβ Pollable event Since 4.03 π¦val sigsys : signalβ Bad argument to routine Since 4.03 πval sigtrap : signalβ Trace/breakpoint trap Since 4.03 πval sigurg : signalβ Urgent condition on socket Since 4.03 π₯val sigxcpu : signalβ Timeout in cpu time Since 4.03 β°val sigxfsz : signalβ File size limit exceeded Since 4.03 πval sigio : signalβ I/O is possible on a descriptor Since 5.4 π«Άval sigwinch : signalβ Window size change Since 5.4 π¦val signal_to_string : signal -> stringπ
okay so bestie, val signal_to_string : signal -> string formats an OCaml signal as a C POSIX constant, or as "SIG(%d)" for platform-dependent signal numbers. β¨ Since 5.4 β and it raises Invalid_argument for unrecognised negative numbers.
val signal_of_int : int -> signalβsignal_of_int nconverts a platform-dependent signal number n to an OCaml signal number. For positive n this is n itself if OCaml does not have a platform-independent signal number for n. Since 5.4. RaisesInvalid_argumentif n is negative. π¦val signal_to_int : signal -> intβsignal_to_int nconverts an OCaml signal number n to a platform-dependent signal number. For positive n this is n itself. Since 5.4. RaisesInvalid_argumentfor unrecognised negative numbers.exception Breakβ Exception raised on interactive interrupt ifSys.catch_breakis enabled. πval catch_break : bool -> unitβcatch_breakgoverns whether interactive interrupt (ctrl-C) terminates the program or raises theBreakexception. Callcatch_break trueto enable raisingBreak, andcatch_break falseto let the system terminate the program on user interrupt.
Inside multi-threaded programs, the Break exception will arise in any one of the active threads, and will keep arising on further interactive interrupt until all threads are terminated. Use signal masks from Thread.sigmask to direct the interrupt towards a specific thread. π§΅β¨
val ocaml_version : stringβocaml_versionis the version of OCaml. It is a string of the form"major.minor[.patchlevel][(+|~)additional-info]", wheremajor,minor, andpatchlevelare integers, andadditional-infois an arbitrary string. The[.patchlevel]part was absent before version3.08.0and became mandatory from3.08.0onwards. The[(+|~)additional-info]part may be absent. πval development_version : boolβtrueif this is a development version,falseotherwise. Since 4.14.
and then we have these cutie type definitions:
type extra_prefix =
| Plus
| Tilde
Since 4.14 β¨
type extra_info = extra_prefix * string
Since 4.14
type ocaml_release_info = {
major : int ;
minor : int ;
patchlevel : int ;
extra : extra_info option ;
}
Since 4.14
val ocaml_release : ocaml_release_infoβocaml_releaseis the version of OCaml. Since 4.14.val enable_runtime_warnings : bool -> unitβ Control whether the OCaml runtime system can emit warnings onstderr. Currently, the only supported warning is triggered when a channel created byopen_*functions is finalized without being closed. Runtime warnings are disabled by default. Since 4.03.
β οΈ Alert unsynchronized_access. The status of runtime warnings is a mutable global state. π¨
val runtime_warnings_enabled : unit -> boolβ Return whether runtime warnings are currently enabled. Since 4.03.
β οΈ Alert unsynchronized_access. The status of runtime warnings is a mutable global state. π¨
β‘ Optimization β‘
val opaque_identity : 'a -> 'aβ For the purposes of optimization,opaque_identitybehaves like an unknown (and thus possibly side-effecting) function. π«₯
At runtime, opaque_identity disappears altogether. However, it does prevent the argument from being garbage collected until the location where the call would have occurred.
A typical use of this function is to prevent pure computations from being optimized away in benchmarking loops. For example:
for _round = 1 to 100_000 do
ignore (Sys.opaque_identity (my_pure_computation ()))
done
Since 4.03
and last but not least:
module Immediate64 : sig end
that's literally it, no cap. ππ
this iconic page is brought to you by OCamldoc, dated 2026-06-22, and it's literally Sys(3) β periodt. π«Άπ
π¦ where this page comes from
- arch rolling: ocaml 5.5.0-1 Β· LGPL2.1 AND custom: QPL-1.0
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms