Module Unix


module Unix: sig .. end
Unix システムインタフェース


エラーの報告



type error =
| E2BIG (*引数リストが長過ぎる*)
| EACCES (*パーミッション違反*)
| EAGAIN (*リソースが一時的に利用不可である。乞再試行*)
| EBADF (*不正なファイル記述子*)
| EBUSY (*リソースが利用不可である*)
| ECHILD (*子プロセスが存在しない*)
| EDEADLK (*リソースのデッドロックの可能性があった*)
| EDOM (*数学関数等の引数が定義外である*)
| EEXIST (*ファイルが既に存在する*)
| EFAULT (*不正なアドレス*)
| EFBIG (*ファイルが大き過ぎる*)
| EINTR (*関数がシグナルにより中断された*)
| EINVAL (*不正な引数*)
| EIO (*ハードウェア入出力エラー*)
| EISDIR (*ディレクトリである*)
| EMFILE (*プロセスのオープンしているファイルが多過ぎる*)
| EMLINK (*リンクが多過ぎる*)
| ENAMETOOLONG (*ファイル名が長過ぎる*)
| ENFILE (*システム中で開いているファイルが多過ぎる*)
| ENODEV (*そのようなデバイスは存在しない*)
| ENOENT (*そのようなファイルないしディレクトリは存在しない*)
| ENOEXEC (*実行ファイルではない*)
| ENOLCK (*ロックを利用できない*)
| ENOMEM (*十分なメモリがない*)
| ENOSPC (*デバイスに空きがない*)
| ENOSYS (*機能がサポートされていない*)
| ENOTDIR (*ディレクトリではない*)
| ENOTEMPTY (*ディレクトリが空ではない*)
| ENOTTY (*不適切な ioctl*)
| ENXIO (*そのようなデバイスやアドレスが存在しない*)
| EPERM (*操作が許可されていない*)
| EPIPE (*パイプの切断*)
| ERANGE (*結果が大き過ぎる*)
| EROFS (*ファイルシステムが読み込み専用である*)
| ESPIPE (*パイプなどに対する不正な seek*)
| ESRCH (*そのようなプロセスは存在しない*)
| EXDEV (*不正なリンク*)
| EWOULDBLOCK (*操作がブロックする可能性があった*)
| EINPROGRESS (*操作が進行中である*)
| EALREADY (*操作が既に進行中である*)
| ENOTSOCK (*ソケット以外に対するソケット操作*)
| EDESTADDRREQ (*送り先アドレスが必要である*)
| EMSGSIZE (*メッセージが長過ぎる*)
| EPROTOTYPE (*ソケットに対する適切でないプロトコル*)
| ENOPROTOOPT (*プロトコルが利用可能ではない*)
| EPROTONOSUPPORT (*プロトコルがサポートされていない*)
| ESOCKTNOSUPPORT (*サポートされていないソケット種別*)
| EOPNOTSUPP (*ソケットでサポートされない操作*)
| EPFNOSUPPORT (*サポートされないプロトコルファミリ*)
| EAFNOSUPPORT (*プロトコルファミリでサポートされないアドレスファミリ*)
| EADDRINUSE (*アドレスが既に使用中である*)
| EADDRNOTAVAIL (*所望のアドレスを割り当てられなかった*)
| ENETDOWN (*ネットワークが不通である*)
| ENETUNREACH (*ネットワークに到達不能である*)
| ENETRESET (*リセットによりネットワーク接続が切断された*)
| ECONNABORTED (*自ホストのソフトウェアにより接続が中断された*)
| ECONNRESET (*接続先により接続がリセットされた*)
| ENOBUFS (*バッファ領域不足*)
| EISCONN (*ソケットが既に接続済みである*)
| ENOTCONN (*ソケットが接続されていない*)
| ESHUTDOWN (*ソケットの切断後には送信できない*)
| ETOOMANYREFS (*参照が多過ぎて結合できない*)
| ETIMEDOUT (*接続がタイムアウトした*)
| ECONNREFUSED (*接続が拒否された*)
| EHOSTDOWN (*宛先ホストがダウンしている*)
| EHOSTUNREACH (*宛先ホストへの経路が存在しない*)
| ELOOP (*シンボリックリンクの参照が深過ぎる*)
| EOVERFLOW (*ファイルの大きさまたは位置が表現不可能である*)
| EUNKNOWNERR of int (*未知のエラー*)
エラーコードの型。 POSIX 標準で定義されたエラーおよび UNIX98、 BSD で定義された追加のエラーです。 それ以外のエラーは EUNKNOWNERR に対応づけられます。
exception Unix_error of error * string * string
以下のシステムコールでエラーが起こった場合に発生します。 最初の要素はエラーコード、次の要素は関数名、最後の要素は関数に文字列引数があればそのいずれか、なければ空文字列です。
val error_message : error -> string
与えられたエラーの説明文字列を返します。
val handle_unix_error : ('a -> 'b) -> 'a -> 'b
handle_unix_error f xfx に適用してその戻り値を返します。 Unix_error 例外が発生した場合には、そのエラーの説明文字列を表示し、終了コード 2 で終了します。

プロセスの環境へのアクセス


val environment : unit -> string array
プロセスの環境を「値=名前」の形式の文字列の配列で返します。
val getenv : string -> string
プロセスの環境で変数に対応づけられた値を返します。 変数が未束縛の場合には Not_found 例外が発生します (この関数は Sys.getenv とまったく同じです)。
val putenv : string -> string -> unit
Unix.putenv name value は変数に対応づけられた値をプロセスの環境に設定します。 name は環境変数の名前で、 value はそれに新たに対応づけられる値です。

プロセス処理



type process_status =
| WEXITED of int (*exit によりプロセスが正常に終了した。引数は終了コード*)
| WSIGNALED of int (*プロセスがシグナルにより kill された。引数はシグナル番号*)
| WSTOPPED of int (*プロセスがシグナルにより停止した。引数はシグナル番号*)
プログラムの終了ステータスです。 標準のシグナル番号の定義については Sys モジュールを参照してください。 シグナル番号は OS で使われるものとは異なることに注意してください。

type wait_flag =
| WNOHANG (*子プロセスがいずれも終了していない場合にはブロックしない。 ただし、プロセス ID が 0 の場合は直ちに返る*)
| WUNTRACED (*子プロセスが STOP シグナルを受け取った場合にも報告する*)
Unix.waitpid 用のフラグです。
val execv : string -> string array -> 'a
execv prog args はファイル prog 中のプログラムを、現在の環境で、引数 args で実行します。 execv* 系の関数は返りません。 実行に成功した場合には、現在のプログラムが新しいプログラムで置き換えられます。 失敗した場合には Unix.Unix_error 例外が発生します。
val execve : string -> string array -> string array -> 'a
Unix.execv と同じですが、第三引数としてプログラム実行時の環境を受け取ります。
val execvp : string -> string array -> 'a
Unix.execv と同じですが、プログラムをパスから探索します。
val execvpe : string -> string array -> string array -> 'a
Unix.execve と同じですが、プログラムをパスから探索します。
val fork : unit -> int
新しいプロセスを fork します。 子プロセスでは戻り値は 0 になり、親プロセスでは戻り値は子プロセスのプロセス ID になります。
val wait : unit -> int * process_status
子プロセスのいずれかが終了するまで待ち、子プロセスのプロセス ID と終了ステータスを返します。
val waitpid : wait_flag list -> int -> int * process_status
Unix.wait と同じですが、与えられたプロセス ID の子プロセスを待ちます。 プロセス ID として -1 を指定すると任意の子プロセスを待ち、 0 を指定すると現在のプロセスと同一のプロセスグループの任意の子プロセスを待ちます。 負のプロセス ID はプロセスグループを表します。 フラグのリストには子プロセスを待たずに直ちに返るか、子プロセスの停止も報告するかを指定します。
val system : string -> process_status
与えられたプログラムを実行し、それが終了するまで待ち、そのプログラムの終了ステータスを返します。 引数の文字列は /bin/sh により解釈されるため、リダイレクトやクォート、変数等を含めることができます。 戻り値 WEXITED 127 はシェルを実行できなかったことを意味します。
val getpid : unit -> int
現在のプロセスのプロセス ID を返します。
val getppid : unit -> int
親プロセスのプロセス ID を返します。
val nice : int -> int
プロセスの優先度を変更します。 引数の整数値が nice 値に加えられます(nice 値が高いほど優先度が低いことを意味します)。 変更後の nice 値を返します。

基本入出力

type file_descr 
ファイル記述子を表す抽象型
val stdin : file_descr
標準入力のファイル記述子。
val stdout : file_descr
標準出力のファイル記述子。
val stderr : file_descr
標準エラーのファイル記述子。

type open_flag =
| O_RDONLY (*読み込み用に開く*)
| O_WRONLY (*書き込み用に開く*)
| O_RDWR (*読み書き両用に開く*)
| O_NONBLOCK (*non-blocking モードで開く*)
| O_APPEND (*追記用に開く*)
| O_CREAT (*存在しなかった場合には作成する*)
| O_TRUNC (*存在した場合は長さを 0 に切り詰める*)
| O_EXCL (*存在した場合には失敗する*)
| O_NOCTTY (*このデバイスを制御端末にしない*)
| O_DSYNC (*同期データ入出力の完了を以て書き込みを完了する*)
| O_SYNC (*同期ファイル入出力の完了を以て書き込みを完了する*)
| O_RSYNC (*書き込みの終了を待ってから読み込む(O_SYNC / O_DSYNC 指定に依存します)*)
Unix.openfile 用のフラグです。
type file_perm = int 
ファイルのアクセス権限の型です。例えば 0o640 は、ユーザには読み書き権限、グループからは読み込み権限、それ以外には権限なしを表します。
val openfile : string -> open_flag list -> file_perm -> file_descr
与えられたフラグに従って指定の名前のファイルを開きます。 第三引数はファイルを作成する場合のパーミッションです。 ファイルに対する記述子を返します。
val close : file_descr -> unit
ファイル記述子を閉じます。
val read : file_descr -> string -> int -> int -> int
read fd buff ofs len はファイル記述子 fd から len 文字読み込み、文字列 bufofs 文字目以降に格納します。 実際に読み込まれた文字数を返します。
val write : file_descr -> string -> int -> int -> int
write fd buff ofs len は文字列 buffofs 文字目から len 文字を取り出し、ファイル記述子 fd に書き込みます。 戻り値は実際に書き込まれた文字数です。 文字がすべて書き込まれるかエラーが起こるまで書き込み処理を繰り返します。
val single_write : file_descr -> string -> int -> int -> int
write と同じですが、一度だけ書き込みます。 したがって、エラーが起こった場合には single_write ではデータがまったく書き込まれないことが保証されます。

標準入出力関数とのインタフェース


val in_channel_of_descr : file_descr -> in_channel
与えられたファイル記述子から読み込む入力チャネルを作成します。 初期状態ではチャネルはバイナリモードです。 テキストモードにするには set_binary_mode_in ic false としてください。
val out_channel_of_descr : file_descr -> out_channel
与えられたファイル記述子に書き込む出力チャネルを作成します。 初期状態ではチャネルはバイナリモードです。 テキストモードにするには set_binary_mode_out ic false としてください。
val descr_of_in_channel : in_channel -> file_descr
与えられた入力チャネルに対するファイル記述子を返します。
val descr_of_out_channel : out_channel -> file_descr
与えられた出力チャネルに対するファイル記述子を返します。

seek と truncate



type seek_command =
| SEEK_SET (*ファイルの先頭からの相対位置で位置を表す*)
| SEEK_CUR (*現在の位置からの相対位置で位置を表す*)
| SEEK_END (*ファイル終端からの相対位置で位置を表す*)
Unix.lseek の位置指定用モードです。
val lseek : file_descr -> int -> seek_command -> int
ファイル記述子の現在位置を設定します。
val truncate : string -> int -> unit
与えられた名前のファイルを指定のサイズに切り詰めます。
val ftruncate : file_descr -> int -> unit
与えられたファイル記述子に対応するファイルを指定のサイズに切り詰めます。

ファイルの状態



type file_kind =
| S_REG (*通常のファイル*)
| S_DIR (*ディレクトリ*)
| S_CHR (*キャラクタデバイス*)
| S_BLK (*ブロックデバイス*)
| S_LNK (*シンボリックリンク*)
| S_FIFO (*名前付きパイプ*)
| S_SOCK (*ソケット*)

type stats = {
   st_dev : int; (*デバイス番号*)
   st_ino : int; (*inode 番号*)
   st_kind : file_kind; (*ファイルの種類*)
   st_perm : file_perm; (*アクセス権限*)
   st_nlink : int; (*リンクの数*)
   st_uid : int; (*所有者のユーザー ID*)
   st_gid : int; (*ファイルのグループ ID*)
   st_rdev : int; (*デバイスのマイナ番号*)
   st_size : int; (*バイト単位での大きさ*)
   st_atime : float; (*最終アクセス時刻*)
   st_mtime : float; (*最終修正時刻*)
   st_ctime : float; (*最後に状態が変更された時刻*)
}
Unix.stat の呼び出しで返る情報。
val stat : string -> stats
与えられた名前のファイルの情報を返します。
val lstat : string -> stats
Unix.stat と同じですが、ファイルがシンボリックリンクであった場合、そのリンク自体の情報を返します。
val fstat : file_descr -> stats
与えられたファイル記述子に対応するファイルの情報を返します。
val isatty : file_descr -> bool
与えられたファイル記述子が端末かコンソールウィンドウを指していた場合に true を返します。そうでなければ false を返します。

ラージファイルの操作


module LargeFile: sig .. end
ラージファイルに対するファイル操作。

ファイル名に対する操作


val unlink : string -> unit
与えられた名前のファイルを削除します。
val rename : string -> string -> unit
rename old newold のファイル名を new に変更します。
val link : string -> string -> unit
link source destsource というファイルへのハードリンクを dest という名前で作成します。

ファイルのパーミッションと所有権


type access_permission =
| R_OK (*読み込み権限*)
| W_OK (*書き込み権限*)
| X_OK (*実行権限*)
| F_OK (*ファイルが存在するかどうか*)
Unix.access 用のフラグ。
val chmod : string -> file_perm -> unit
与えられた名前のファイルのパーミッションを変更します。
val fchmod : file_descr -> file_perm -> unit
現在開いているファイルのパーミッションを変更します。
val chown : string -> int -> int -> unit
与えられた名前のファイルの所有者のユーザー ID とグループ ID を変更します。
val fchown : file_descr -> int -> int -> unit
現在開いているファイルの所有者のユーザー ID とグループ ID を変更します。
val umask : int -> int
プロセスの umask を変更し、変更前の umask を返します。
val access : string -> access_permission list -> unit
与えられた名前のファイルが指定のパーミッションを持つか確認します。 指定のパーミッションを持たない場合には Unix_error 例外が発生します。

ファイル記述子に対する操作


val dup : file_descr -> file_descr
与えられたファイル記述子と同一のファイルを参照する新たなファイル記述子を返します。
val dup2 : file_descr -> file_descr -> unit
dup2 fd1 fd2fd1fd2 に複製します。 fd2 が既に開かれていた場合には fd2 を閉じます。
val set_nonblock : file_descr -> unit
与えられたファイル記述子の non-blocking フラグを立てます。 non-blocking フラグが設定されていると、読み込み時にそのファイル記述子に読み込み可能なデータがない場合に、読み込みがブロックする代わりに EAGAIN または EWOULDBLOCK エラーが発生します。 書き込み時に書き込める領域がない場合にも EAGAIN または EWOULDBLOCK エラーが発生します。
val clear_nonblock : file_descr -> unit
与えられたファイル記述子の non-blocking フラグを落とします。 Unix.set_nonblock を参照してください。
val set_close_on_exec : file_descr -> unit
与えられたファイル記述子の close-on-exec フラグを立てます。 close-on-exec フラグの立ったファイル記述子は、現在のプロセスが exec* 系の関数を使って別のプログラムを起動すると自動的に閉じられます。
val clear_close_on_exec : file_descr -> unit
与えられたファイル記述子の close-on-exec フラグを落とします。 Unix.set_close_on_exec を参照してください。

ディレクトリ


val mkdir : string -> file_perm -> unit
与えられたパーミッションでディレクトリを作成します。
val rmdir : string -> unit
空のディレクトリを削除します。
val chdir : string -> unit
現在のプロセスの作業ディレクトリを変更します。
val getcwd : unit -> string
現在の作業ディレクトリの名前を返します。
val chroot : string -> unit
現在のプロセスのルートディレクトリを変更します。
type dir_handle 
ディレクトリ記述子の型。
val opendir : string -> dir_handle
ディレクトリ記述子を開きます。
val readdir : dir_handle -> string
ディレクトリの次のエントリを返します。
Raises End_of_file ディレクトリの終端に達していた場合
val rewinddir : dir_handle -> unit
ディレクトリ記述子の位置をディレクトリの先頭に再設定します。
val closedir : dir_handle -> unit
ディレクトリ記述子を閉じます。

パイプとリダイレクト


val pipe : unit -> file_descr * file_descr
パイプを作成します。戻り値の最初の要素は読み込み用のファイル記述子、すなわちパイプの出口で、二番目の要素は書き込み用のファイル記述子、すなわちパイプの入口です。
val mkfifo : string -> file_perm -> unit
指定のパーミッションで名前付きパイプを作成します。

高レベルのプロセスとリダイレクトの管理


val create_process : string ->
string array -> file_descr -> file_descr -> file_descr -> int
create_process prog args new_stdin new_stdout new_stderr は新しいプロセスを fork してファイル prog 中のプログラムを引数 args で実行します。新しいプロセスのプロセス ID が即座に返り、新しいプロセスは現在のプロセスと並列に実行されます。 新しいプロセスの標準入力と出力は new_stdinnew_stdoutnew_stderr の記述子に接続されます。例えば new_stdoutstdout を渡すと新しいプロセスの標準出力はリダイレクトされず、現在のプロセスと同じになります。 実行ファイル prog はパスから探索されます。 新しいプロセスは現在のプロセスと同じ環境を持ちます。
val create_process_env : string ->
string array ->
string array -> file_descr -> file_descr -> file_descr -> int
create_process_env prog args env new_stdin new_stdout new_stderrUnix.create_process と同様の動作をしますが、追加の引数として env でプログラムの環境を指定することができます。
val open_process_in : string -> in_channel
高レベルのパイプとプロセスの管理。 この関数は与えられたコマンドを現在のプログラムと並列に実行します。 実行するコマンドの標準出力はパイプにリダイレクトされ、それを戻り値の入力チャネルから読むことができます。 コマンドは Unix.system と同じく /bin/sh により解釈されます。
val open_process_out : string -> out_channel
Unix.open_process_in と同じですがコマンドの標準入力をパイプにリダイレクトします。 戻り値の出力チャネルに書き込まれたデータは実行したコマンドの標準入力に送られます。 警告: 出力チャネルへの書き込みはバッファリングされます。正しく同期していることを保証するためには適切なタイミングで flush を呼び出すようにしてください。
val open_process : string -> in_channel * out_channel
Unix.open_process_out と同じですが、コマンドの標準入力と標準出力の両方を戻り値のチャネルに接続されたパイプにリダイレクトします。 入力チャネルはコマンドの出力に接続され、出力チャネルはコマンドの入力に接続されます。
val open_process_full : string ->
string array ->
in_channel * out_channel * in_channel
Unix.open_process とほぼ同じですが、第二引数でコマンドに渡す環境を指定します。 戻り値の三つ組は順に、コマンドの標準出力、標準入力、標準エラーに接続されたチャネルになります。
val close_process_in : in_channel -> process_status
Unix.open_process_in によって開いたチャネルを閉じます。 コマンドの終了を待ち、終了ステータスを返します。
val close_process_out : out_channel -> process_status
Unix.open_process_out によって開いたチャネルを閉じます。 コマンドの終了を待ち、終了ステータスを返します。
val close_process : in_channel * out_channel -> process_status
Unix.open_process によって開いたチャネルを閉じます。 コマンドの終了を待ち、終了ステータスを返します。
val close_process_full : in_channel * out_channel * in_channel ->
process_status
Unix.open_process_full によって開いたチャネルを閉じます。 コマンドの終了を待ち、終了ステータスを返します。

シンボリックリンク


val symlink : string -> string -> unit
symlink source dest はファイル source のシンボリックリンク dest を作成します。
val readlink : string -> string
リンクの内容を読み込みます。

polling


val select : file_descr list ->
file_descr list ->
file_descr list ->
float -> file_descr list * file_descr list * file_descr list
いずれかのチャネルで何らかの入出力操作が可能になるまで待ちます。 引数のみっつのリストは順に、読み込みチェックをする記述子の集合、書き込みチェックをする記述子の集合、例外的状況をチェックする記述子の集合です。 第四引数には最大停止時間を秒単位で指定します。 負の数を指定するとタイムアウトしなくなります(無限に待ちます)。 戻り値は記述子の集合の三つ組です。 それぞれの要素は順に、読み込み可能になったものの集合、書き込み可能になったものの集合、例外的状況が保留されているものの集合です。

ロック



type lock_command =
| F_ULOCK (*ロックを解除する*)
| F_LOCK (*書き込みロック。既にロックされていた場合にはブロックする*)
| F_TLOCK (*書き込みロック。既にロックされていた場合には失敗する*)
| F_TEST (*他のプロセスによりロックされているか検査する*)
| F_RLOCK (*読み込みロック。既にロックされていた場合にはブロックする*)
| F_TRLOCK (*読み込みロック、既にロックされていた場合には失敗する*)
Unix.lockf 用のコマンド。
val lockf : file_descr -> lock_command -> int -> unit
lockf fd cmd sizefd として open されているファイルの領域をロックします。 ロックされるのは、現在の読み込み/書き込み位置から、 size が正の場合には前方に size バイト、負の場合には後方に size バイト、 0 の場合はファイル終端までの領域になります。 書き込みロックは、他のプロセスがその領域に対して読み込み・書き込みロックを獲得できないようにします。 読み込みロックは、他のプロセスはその領域に対する書き込みロックを獲得できませんが、読み込みロックは獲得できます。

F_LOCKF_TLOCK コマンドは指定の領域を書き込みロックしようとし、 F_RLOCKF_TRLOCK コマンドは指定の領域を読み込みロックしようとします。 他のプロセスが既にロックを獲得していて現在のプロセスがロックを獲得できない場合、 F_LOCKF_RLOCK はロックが解除されるまでブロックし、 F_TLOCKF_TRLOCK は即座に例外を発生させ失敗します。 F_ULOCK は現在のプロセスが指定の領域に獲得しているすべてのロックを解除します。 F_TEST は実際にロックを行なわずに指定の領域に対して書き込みロックを獲得できるか検査します。 F_TEST はロックが獲得できる場合には直ちに返り、そうでない場合には失敗します。


シグナル

注意: シグナルハンドラの設定は Sys.signalSys.set_signal で行ないます。

val kill : int -> int -> unit
kill pid sig はシグナル番号 sig をプロセス ID が pid のプロセスに送ります。

type sigprocmask_command =
| SIG_SETMASK
| SIG_BLOCK
| SIG_UNBLOCK
val sigprocmask : sigprocmask_command -> int list -> int list
sigprocmask cmd sigs はブロックされるシグナルの集合を変更します。 cmdSIG_SETMASK の場合、ブロックされるシグナルは sigs に指定されたものになります。 cmdSIG_BLOCK の場合、 sigs 中のシグナルがブロックされるシグナルに追加されます。 cmdSIG_UNBLOCK の場合、 sigs 中のシグナルはブロックされるシグナルから取り除かれます。 sigprocmask は変更前の値を返します。
val sigpending : unit -> int list
ブロックされるシグナルのうち、現在保留されているものの集合を返します。
val sigsuspend : int list -> unit
sigsuspend sigs はブロックされるシグナルの集合を sigs の値に不可分に設定し、無視されず、ブロックもされないシグナルが送信されてくるまで待ちます。 この関数から返るときにブロックされるシグナルは以前の値に戻ります。
val pause : unit -> unit
無視されず、ブロックもされないシグナルが送信されてくるまで待ちます。

時間関数



type process_times = {
   tms_utime : float; (*プロセスのユーザー時間*)
   tms_stime : float; (*プロセスのシステム時間*)
   tms_cutime : float; (*子プロセスのユーザー時間*)
   tms_cstime : float; (*子プロセスのシステム時間*)
}
プロセスの実行時間(CPU 時間)。

type tm = {
   tm_sec : int; (*秒: 0..60*)
   tm_min : int; (*分: 0..59*)
   tm_hour : int; (*時: 0..23*)
   tm_mday : int; (*日: 1..31*)
   tm_mon : int; (*月: 0..11*)
   tm_year : int; (*年 - 1900*)
   tm_wday : int; (*曜日(日曜日が 0)*)
   tm_yday : int; (*通算日: 0..365*)
   tm_isdst : bool; (*夏時間中かどうか*)
}
時刻と日付を表す型。
val time : unit -> float
1970 年 1 月 1 日 00:00:00 GMT から現在までの経過秒数。
val gettimeofday : unit -> float
Unix.time と同じですが、分解能が 1 秒より上です。
val gmtime : float -> tm
Unix.time の返した秒数を日付と時刻に変換します。 UTC (協定世界時)すなわち GMT を仮定しています。
val localtime : float -> tm
Unix.time の返した秒数を日付と時刻に変換します。 地域時間を仮定しています。
val mktime : tm -> float * tm
tm 引数で指定された日付と時刻を Unix.time の返す秒数に変換します。 tmtm_isdsttm_wdaytm_yday フィールドは無視されます。 さらに、 tmtm_wdaytm_ydaytm_isdst を他のフィールドから再計算し、それ以外のフィールドを正規化したものを返します(例えば、 10 月 40 日が 11 月 9 日の変換されるなど)。 tm 引数は地域時間として解釈します。
val alarm : int -> int
SIGALRM シグナルを与えられた秒数後に設定します。
val sleep : int -> unit
与えられた秒数だけ実行を中断します。
val times : unit -> process_times
現在のプロセスの実行時間を返します。
val utimes : string -> float -> float -> unit
ファイルの最終アクセス時刻(第二引数)と最終修正時刻(第三引数)を設定します。 時刻は 1970 年 1 月 1 日 00:00:00 GMT からの経過秒数で表します。 0.0 は現在時刻と解釈されます。

type interval_timer =
| ITIMER_REAL (*実時間に沿ってタイマーの値が減少し、指定時間経過した後に SIGALRM シグナルを送信する*)
| ITIMER_VIRTUAL (*プロセスの仮想時間に沿ってタイマーの値が減少し、指定時間経過した後に SIGALRM シグナルを送信する*)
| ITIMER_PROF (*プロファイリング用。プロセス自体の実行中とそのプロセスの代わりにシステムが実行中の場合にタイマーの値が減少し、指定時間経過した後に SIGPROF シグナルを送信する。*)
インターバルタイマーの種類。

type interval_timer_status = {
   it_interval : float; (*期間*)
   it_value : float; (*現在のタイマーの値*)
}
インターバルタイマーの状態を表す型。
val getitimer : interval_timer -> interval_timer_status
与えられたインターバルタイマーの現在の状態を返します。
val setitimer : interval_timer ->
interval_timer_status -> interval_timer_status
setitimer t s はインターバルタイマーの状態を設定し、変更前の状態を返します。 引数 s は次のように解釈されます。 s.it_value は 0 でなければ次のタイマーの時間になります。 s.it_interval は 0 でなければ、現在のタイマーが完了したあとに it_value を再設定するときに使われます。 s.it_value を 0 にするとタイマーを無効にします。 s.it_interval を 0 にすると現在のタイマーが完了した後にタイマーが無効になります。

ユーザー ID とグループ ID


val getuid : unit -> int
プロセスを実行しているユーザーのユーザー ID を返します。
val geteuid : unit -> int
プロセスの実効ユーザー ID を返します。
val setuid : int -> unit
プロセスのユーザー ID と実効ユーザー ID を設定します。
val getgid : unit -> int
プロセスを実行しているユーザーのグループ ID を返します。
val getegid : unit -> int
実行中のプロセスの実効グループ ID を返します。
val setgid : int -> unit
プロセスのグループ ID と実効グループ ID を設定します。
val getgroups : unit -> int array
プロセスを実行しているユーザーの属しているグループの一覧を返します。
val setgroups : int array -> unit
setgroups groups は呼び出し元のプロセス補助グループ ID を設定します。 適切な特権が必要です。
val initgroups : string -> int -> unit
initgroups user group/etc/group のグループデータベースを読み込み、 user の属しているグループを使ってグループアクセスリストを初期化します。 追加のグループとして group もリストに追加されます。

type passwd_entry = {
   pw_name : string;
   pw_passwd : string;
   pw_uid : int;
   pw_gid : int;
   pw_gecos : string;
   pw_dir : string;
   pw_shell : string;
}
passwd データベースの項目。

type group_entry = {
   gr_name : string;
   gr_passwd : string;
   gr_gid : int;
   gr_mem : string array;
}
group データベースの項目。
val getlogin : unit -> string
プロセスを実行しているユーザーのログイン名を返します。
val getpwnam : string -> passwd_entry
与えられた名前に対応する passwd の項目を返します。 見つからない場合には Not_found 例外が発生します。
val getgrnam : string -> group_entry
与えられた名前に対応する group の項目を返します。 見つからない場合には Not_found 例外が発生します。
val getpwuid : int -> passwd_entry
与えられたユーザー ID に対応する passwd の項目を返します。 見つからない場合には Not_found 例外が発生します。
val getgrgid : int -> group_entry
与えられたグループ ID に対応する group の項目を返します。 見つからない場合には Not_found 例外が発生します。

インターネットアドレス


type inet_addr 
インターネットアドレスを表す抽象型。
val inet_addr_of_string : string -> inet_addr
インターネットアドレスを表示可能な表現から内部表現に変換します。 引数の文字列は、 IPv4 アドレスに対してはよっつの数をピリオドを区切ったもの(XXX.YYY.ZZZ.TTT)、 IPv6 アドレスに対してはやっつ以下の数字をコロンで区切ったものになります。 与えられた文字列がこれらの形式でない場合には Failure 例外が発生します。
val string_of_inet_addr : inet_addr -> string
与えられたインターネットアドレスの表示可能な表現を返します。 戻り値の形式については Unix.inet_addr_of_string を参照してください。
val inet_addr_any : inet_addr
bind とともに使うための特別な IPv4 アドレスで、ホスト計算機が保有するすべてのインターネットアドレスを表します。
val inet_addr_loopback : inet_addr
ホスト計算機を表す特別な IPv4 アドレスです(127.0.0.1)。
val inet6_addr_any : inet_addr
bind とともに使うための特別な IPv6 アドレスで、ホスト計算機が保有するすべてのインターネットアドレスを表します。
val inet6_addr_loopback : inet_addr
ホスト計算機を表す特別な IPv6 アドレスです(::1)。

ソケット



type socket_domain =
| PF_UNIX (*UNIX ドメイン*)
| PF_INET (*インターネットドメイン(IPv4)*)
| PF_INET6 (*インターネットドメイン(IPv4)*)
ソケットドメインの型。 IPv6 ソケット(PF_INET6)はすべてのプラットフォームでサポートされているわけではありません。

type socket_type =
| SOCK_STREAM (*ストリームソケット*)
| SOCK_DGRAM (*データグラムソケット*)
| SOCK_RAW (*生ソケット*)
| SOCK_SEQPACKET (*シーケンス化パケットソケット*)
ソケットの種別の型。通信のセマンティクスを指定します。

type sockaddr =
| ADDR_UNIX of string
| ADDR_INET of inet_addr * int
ソケットアドレスの型。 ADDR_UNIX name は Unix ドメインソケットで、 name はファイルシステム中のファイル名です。 ADDR_INET (addr, port) はインターネットドメインのソケットアドレスで、 addr は計算機のインターネットアドレス、 port はポート番号です。
val socket : socket_domain -> socket_type -> int -> file_descr
指定されたドメイン、指定された種別のソケットを新たに作成します。 第三引数はプロトコルの種別で、 0 にするとそのソケットの種別のデフォルトを選択します。
val domain_of_sockaddr : sockaddr -> socket_domain
与えられたソケットアドレスのドメインを返します。
val socketpair : socket_domain ->
socket_type -> int -> file_descr * file_descr
互いに接続した無名のソケットの対を返します。
val accept : file_descr -> file_descr * sockaddr
与えられたソケットへの接続を受け付けます。 戻り値はクライアントに接続したソケットのファイル記述子とアドレスです。
val bind : file_descr -> sockaddr -> unit
ソケットをアドレスに束縛します。
val connect : file_descr -> sockaddr -> unit
ソケットをアドレスに接続します。
val listen : file_descr -> int -> unit
ソケットを接続要求を受け付けるように設定します。 整数引数は保留する要求の個数の上限です。

type shutdown_command =
| SHUTDOWN_RECEIVE (*受信に関して閉じる*)
| SHUTDOWN_SEND (*送信に関して閉じる*)
| SHUTDOWN_ALL (*両方閉じる*)
shutdown 用のコマンドの型。
val shutdown : file_descr -> shutdown_command -> unit
ソケットの接続を切断します。 SHUTDOWN_SEND を第二引数に渡すと、接続のもう一方の終端での読み込み処理はファイル終端状態を返すようになります。 SHUTDOWN_RECEIVE を渡すと、接続のもう一方の終端での書き込み処理はパイプが閉じられている状態を返すようになります(SIGPIPE シグナル)。
val getsockname : file_descr -> sockaddr
与えられたソケットのアドレスを返します。
val getpeername : file_descr -> sockaddr
与えられたソケットに接続しているホストのアドレスを返します。

type msg_flag =
| MSG_OOB
| MSG_DONTROUTE
| MSG_PEEK
Unix.recvUnix.recvfromUnix.sendUnix.sendto 用のフラグ。
val recv : file_descr -> string -> int -> int -> msg_flag list -> int
接続状態のソケットからデータを受信します。
val recvfrom : file_descr ->
string -> int -> int -> msg_flag list -> int * sockaddr
非接続状態のソケットからデータを受信します。
val send : file_descr -> string -> int -> int -> msg_flag list -> int
接続状態のソケットを介してデータを送信します。
val sendto : file_descr ->
string -> int -> int -> msg_flag list -> sockaddr -> int
非接続状態のソケットを介してデータを送信します。

ソケットオプション



type socket_bool_option =
| SO_DEBUG (*デバッグ情報を記録する*)
| SO_BROADCAST (*ブロードキャストメッセージの送信を許可する*)
| SO_REUSEADDR (*bind 時のローカルアドレスの再利用を許可する*)
| SO_KEEPALIVE (*接続を保持する*)
| SO_DONTROUTE (*標準のルーティングアルゴリズムをバイパスする*)
| SO_OOBINLINE (*帯域外データをインラインにする*)
| SO_ACCEPTCONN (*ソケットが listen されているかどうか報告する*)
| TCP_NODELAY (*TCP ソケットの Nagle のアルゴリズムを制御する*)
| IPV6_ONLY (*IPv6 ソケットを IPv4 アドレスに束縛するのを禁止する*)
Unix.getsockopt で問い合わせ、 Unix.setsockopt で設定するソケットオプション。 これらのオプションの値は真偽値(true または false)です。

type socket_int_option =
| SO_SNDBUF (*送信バッファの大きさ*)
| SO_RCVBUF (*受信バッファの大きさ*)
| SO_ERROR (*非推奨。代わりに Unix.getsockopt_error を使ってください*)
| SO_TYPE (*ソケットの種類を報告する*)
| SO_RCVLOWAT (*入力操作で処理する最小のバイト数*)
| SO_SNDLOWAT (*出力操作で処理する最大のバイト数*)
Unix.getsockopt_int で問い合わせ、 Unix.setsockopt_int で設定するソケットオプション。 これらのオプションの値は整数です。

type socket_optint_option =
| SO_LINGER (*接続を閉じる際にバッファにデータが残っていた場合に待機(linger)するかどうか。また待機する場合は何秒待機するか*)
Unix.getsockopt_optint で問い合わせ、 Unix.setsockopt_optint で設定するソケットオプション。 これらのオプションの値は int option 型で、 None は「無効」を意味します。

type socket_float_option =
| SO_RCVTIMEO (*入力処理のタイムアウト*)
| SO_SNDTIMEO (*出力処理のタイムアウト*)
Unix.getsockopt_float で問い合わせ、 Unix.setsockopt_float で設定するソケットオプション。 これらのオプションの値は浮動小数点数で秒数を表します。 0 はタイムアウトしないことを表します。
val getsockopt : file_descr -> socket_bool_option -> bool
与えられたソケットの真偽値オブションの現在の値を返します。
val setsockopt : file_descr -> socket_bool_option -> bool -> unit
与えられたソケットの真偽値オブションの値を設定します。
val getsockopt_int : file_descr -> socket_int_option -> int
Unix.getsockopt と同じですが、整数値オプション用です。
val setsockopt_int : file_descr -> socket_int_option -> int -> unit
Unix.setsockopt と同じですが、整数値オプション用です。
val getsockopt_optint : file_descr -> socket_optint_option -> int option
Unix.getsockopt と同じですが、 int option 型のオプション用です。
val setsockopt_optint : file_descr -> socket_optint_option -> int option -> unit
Unix.setsockopt と同じですが、 int option 型のオプション用です。
val getsockopt_float : file_descr -> socket_float_option -> float
Unix.getsockopt と同じですが、浮動小数点数値オプション用です。
val setsockopt_float : file_descr -> socket_float_option -> float -> unit
Unix.getsockopt と同じですが、浮動小数点数値オプション用です。
val getsockopt_error : file_descr -> error option
与えられたソケットに対応づけられたエラー状態を返し、エラー状態をリセットします。

高レベルネットワーク接続関数


val open_connection : sockaddr -> in_channel * out_channel
指定されたアドレスのサーバーに接続し、サーバーに接続したバッファ付きのチャネルを返します。 正しく同期していることを保証するためには適切なタイミングで出力チャネルに flush を呼び出すようにしてください。
val shutdown_connection : in_channel -> unit
Unix.open_connection で確立した接続を「切断」します。 すなわち、接続のもう一方の端点で読み込んでいるサーバーにファイル終端条件を送信します。
val establish_server : (in_channel -> out_channel -> unit) ->
sockaddr -> unit
指定されたアドレスでサーバーを確立します。 第一引数に指定した関数は、各接続ごとに引数としてクライアントに接続したバッファ付きのチャネルを受け取ります。 接続ごとに新たなプロセスが作られます。 Unix.establish_server 関数は通常は返りません。

ホストデータベースとプロトコルデータベース



type host_entry = {
   h_name : string;
   h_aliases : string array;
   h_addrtype : socket_domain;
   h_addr_list : inet_addr array;
}
hosts データベースの項目。

type protocol_entry = {
   p_name : string;
   p_aliases : string array;
   p_proto : int;
}
protocols データベースの項目。

type service_entry = {
   s_name : string;
   s_aliases : string array;
   s_port : int;
   s_proto : string;
}
services データベースの項目。
val gethostname : unit -> string
ローカルホストの名前を返します。
val gethostbyname : string -> host_entry
与えられた名前で hosts の項目を検索します。 見つからない場合には Not_found 例外が発生します。
val gethostbyaddr : inet_addr -> host_entry
与えられたアドレスで hosts の項目を検索します。 見つからない場合には Not_found 例外が発生します。
val getprotobyname : string -> protocol_entry
与えられた名前で protocols の項目を検索します。 見つからない場合には Not_found 例外が発生します。
val getprotobynumber : int -> protocol_entry
与えられたプロトコル番号で protocols の項目を検索します。 見つからない場合には Not_found 例外が発生します。
val getservbyname : string -> string -> service_entry
与えられた名前で services の項目を検索します。 見つからない場合には Not_found 例外が発生します。
val getservbyport : int -> string -> service_entry
与えられたサービス番号で services の検索を検索します。 見つからない場合には Not_found 例外が発生します。

type addr_info = {
   ai_family : socket_domain; (*ソケットのドメイン*)
   ai_socktype : socket_type; (*ソケットの種別*)
   ai_protocol : int; (*ソケットのプロトコル番号*)
   ai_addr : sockaddr; (*アドレス*)
   ai_canonname : string; (*正規化されたホスト名*)
}
Unix.getaddrinfo の返すアドレス情報。

type getaddrinfo_option =
| AI_FAMILY of socket_domain (*ソケットのドメインを指定のものに限定する*)
| AI_SOCKTYPE of socket_type (*ソケットの種別を指定のものに限定する*)
| AI_PROTOCOL of int (*プロトコルを指定のものに限定する*)
| AI_NUMERICHOST (*ネームリゾルバを呼び出さない。 IP アドレスの数値を期待する*)
| AI_CANONNAME (*結果の ai_canonname フィールドを設定する*)
| AI_PASSIVE (*アドレスを Unix.bind で使用する any アドレスにする*)
Unix.getaddrinfo 用のオプション。
val getaddrinfo : string -> string -> getaddrinfo_option list -> addr_info list
getaddrinfo host service opts は指定されたホストと指定されたサービスで通信するためのソケットパラメータとアドレスを記述した Unix.addr_info のリストを返します。 ホストやサービス名が未知の場合や、 opts で表された制約を満たせない場合、戻り値は空リストになります。

host はホスト名か、 IP アドレスの文字列表現です。 host には空文字列を渡すこともできます。 この場合は、 optsAI_PASSIVE を含むかどうかに応じて any アドレスまたは loopback アドレスが使われます。 service はサービス名か、ポート番号の文字列表現です。 service にも空文字列を指定することができ、その場合には戻り値のポートフィールドは 0 になります。 opts は空リストにすることもできますが、これを使って呼び出し側が戻り値に特定のソケットドメイン(例えば、IPv6 のみ、または IPv4 のみ)を強制したり、特定の種類のソケット(例えば、TCP のみ、 UDP のみ)を強制したりすることもできます。


type name_info = {
   ni_hostname : string; (*ホスト名もしくは IP アドレス*)
   ni_service : string; (*サービス名もしくはポート番号*)
}
Unix.getnameinfo の返すホストとサービスの情報。

type getnameinfo_option =
| NI_NOFQDN (*ローカルホストの名前を修飾名にしない*)
| NI_NUMERICHOST (*ホスト情報を常に IP アドレスで返す*)
| NI_NAMEREQD (*ホスト名を特定できないときは失敗する*)
| NI_NUMERICSERV (*サービス情報を常にポート番号で返す*)
| NI_DGRAM (*サービスをデフォルトの TCP ではなく UDP ベースで検索する*)
Unix.getnameinfo 用のオプション。
val getnameinfo : sockaddr -> getnameinfo_option list -> name_info
getnameinfo addr opts はソケットアドレス addr に対応するホスト名とサービス名を返します。 opts はこれらの名前をどのように取得するか制御するオプションのリストで、空リストにすることもできます。 エラーが起こった場合には Not_found 例外が発生します。

端末インタフェース



以下の関数は POSIX の標準端末インタフェースを実装したものです。 非同期通信ポートや擬似端末を介した制御機能を提供します。 完全な説明については termios の man ページを参照してください。

type terminal_io = {
   mutable c_ignbrk : bool; (*BREAK 条件を無視する*)
   mutable c_brkint : bool; (*BREAK 時にシグナル割り込みする*)
   mutable c_ignpar : bool; (*パリティエラーの起きた時の文字を無視する*)
   mutable c_parmrk : bool; (*パリティエラーを無視する*)
   mutable c_inpck : bool; (*入力のバリティチェックを有効にする*)
   mutable c_istrip : bool; (*入力文字の 8 ビット目を落とす*)
   mutable c_inlcr : bool; (*入力の NL を CR に置き換える*)
   mutable c_igncr : bool; (*入力の CR を無視する*)
   mutable c_icrnl : bool; (*入力の CR を NL に置き換える*)
   mutable c_ixon : bool; (*入力文字による XON / XOFF を有効にする*)
   mutable c_ixoff : bool; (*入力フロー制御の XON / XOFF 文字を出力する*)
   mutable c_opost : bool; (*出力処理を有効にする*)
   mutable c_obaud : int; (*出力のボーレート(0 は接続の切断を意味する)*)
   mutable c_ibaud : int; (*入力のボーレート*)
   mutable c_csize : int; (*文字のビット数(5-8)*)
   mutable c_cstopb : int; (*ストップビットのビット数(1-2)*)
   mutable c_cread : bool; (*受信を可能にする*)
   mutable c_parenb : bool; (*パリティの生成とチェックを有効にする*)
   mutable c_parodd : bool; (*偶数パリティではなく奇数パリティにする*)
   mutable c_hupcl : bool; (*最後の close でハングアップする*)
   mutable c_clocal : bool; (*モデムの制御線を無視する*)
   mutable c_isig : bool; (*INTR、 QUIT、 SUSP の際にシグナルを生成する*)
   mutable c_icanon : bool; (*カノニカルモードを有効にする(行バッファリングと編集)*)
   mutable c_noflsh : bool; (*INTR、 QUIT、 SUSP 後のフラッシュを無効にする*)
   mutable c_echo : bool; (*入力文字をエコーする*)
   mutable c_echoe : bool; (*ERASE をエコーする(前の文字を消去する)*)
   mutable c_echok : bool; (*KILL をエコーする(現在行を消去する)*)
   mutable c_echonl : bool; (*c_echo が設定されていない場合でも NL をエコーする*)
   mutable c_vintr : char; (*割り込み文字(通常 ctrl-C)*)
   mutable c_vquit : char; (*終了文字(通常 ctrl-\)*)
   mutable c_verase : char; (*消去文字(通常 DEL もしくは ctrl-H)*)
   mutable c_vkill : char; (*行消去文字(通常 ctrl-U)*)
   mutable c_veof : char; (*ファイル終端文字(通常 ctrl-D)*)
   mutable c_veol : char; (*代わりの行末文字(通常なし)*)
   mutable c_vmin : int; (*読み込み要求が満たされるまでに読み込む最小の文字数*)
   mutable c_vtime : int; (*読み込み待ち時間の最大値(0.1 秒単位)*)
   mutable c_vstart : char; (*開始文字(通常 ctrl-Q)*)
   mutable c_vstop : char; (*終了文字(通常 ctrl-S)*)
}
val tcgetattr : file_descr -> terminal_io
与えられたファイル記述子の参照している端末の状態を返します。

type setattr_when =
| TCSANOW
| TCSADRAIN
| TCSAFLUSH
val tcsetattr : file_descr -> setattr_when -> terminal_io -> unit
与えられたファイル記述子の参照している端末の状態を設定します。 第二引数は状態の変更がいつ行なわれるかを示します。 TCSANOW の場合は即座に、 TCSADRAIN は保留されていた出力がすべて送信されたときに、 TCSAFLUSH は受信してまだ読み込んでいなかった入力をすべてフラッシュしたあとに変更を行ないます。 出力パラメータを変更する場合には TCSADRAIN が推奨され、入力パラメータの場合には TCSAFLUSH が推奨されます。
val tcsendbreak : file_descr -> int -> unit
与えられたファイル記述子に BREAK 条件を送信します。 第二引数には BREAK の遅延時間を 0.1 秒単位で指定します。 0 にすると標準の遅延時間(0.25 秒)を意味します。
val tcdrain : file_descr -> unit
与えられたファイル記述子に書き込まれた出力がすべて送信されるまで待ちます。

type flush_queue =
| TCIFLUSH
| TCOFLUSH
| TCIOFLUSH
val tcflush : file_descr -> flush_queue -> unit
第二引数に応じて、与えられたファイル記述子に書き込まれたがまだ送信されていないデータ、もしくは受信したがまだ読み込んでいないデータを破棄します。 TCIFLUSH は受信したが読み込んでいないデータを破棄します。 TCOFLUSH は書き込んだが送信していないデータを破棄します。 TCIOFLUSH は両方を破棄します。

type flow_action =
| TCOOFF
| TCOON
| TCIOFF
| TCION
val tcflow : file_descr -> flow_action -> unit
第二引数に応じて、与えられたファイル記述子へのデータの送受信を一時停止または再開します。 TCOOFF は出力を一時停止し、 TCOON は出力を再開します。 TCIOFF は STOP 文字を送信して入力を一時停止し、 TCION は START 文字を送信して入力を再開します。
val setsid : unit -> int
呼び出したプロセスを新しいセッションに割り当て、制御端末から切り離します。