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 |
| |
ENXIO |
| |
EPERM |
| |
EPIPE |
| |
ERANGE |
| |
EROFS |
| |
ESPIPE |
| |
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 x
は f
を x
に適用してその戻り値を返します。
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 |
| |
WSIGNALED of int |
| |
WSTOPPED of int |
プログラムの終了ステータスです。
標準のシグナル番号の定義については
Sys
モジュールを参照してください。
シグナル番号は OS で使われるものとは異なることに注意してください。
type
wait_flag =
val execv : string -> string array -> 'a
execv prog args
はファイル
prog
中のプログラムを、現在の環境で、引数
args
で実行します。
execv*
系の関数は返りません。
実行に成功した場合には、現在のプログラムが新しいプログラムで置き換えられます。
失敗した場合には
Unix.Unix_error
例外が発生します。
val execve : string -> string array -> string array -> 'a
val execvp : string -> string array -> 'a
val execvpe : string -> string array -> string array -> 'a
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 |
| |
O_APPEND |
| |
O_CREAT |
| |
O_TRUNC |
| |
O_EXCL |
| |
O_NOCTTY |
| |
O_DSYNC |
| |
O_SYNC |
| |
O_RSYNC |
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
文字読み込み、文字列
buf
の ofs
文字目以降に格納します。
実際に読み込まれた文字数を返します。
val write : file_descr -> string -> int -> int -> int
write fd buff ofs len
は文字列 buff
の ofs
文字目から 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 |
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 ; |
|
st_kind : file_kind ; |
|
st_perm : file_perm ; |
|
st_nlink : int ; |
|
st_uid : int ; |
|
st_gid : int ; |
|
st_rdev : int ; |
|
st_size : int ; |
|
st_atime : float ; |
|
st_mtime : float ; |
|
st_ctime : float ; |
}
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 new
は old
のファイル名を new
に変更します。
val link : string -> string -> unit
link source dest
は source
というファイルへのハードリンクを dest
という名前で作成します。
ファイルのパーミッションと所有権
type
access_permission =
| |
R_OK |
| |
W_OK |
| |
X_OK |
| |
F_OK |
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 fd2
は fd1
を fd2
に複製します。
fd2
が既に開かれていた場合には fd2
を閉じます。
val set_nonblock : file_descr -> unit
与えられたファイル記述子の non-blocking フラグを立てます。
non-blocking フラグが設定されていると、読み込み時にそのファイル記述子に読み込み可能なデータがない場合に、読み込みがブロックする代わりに
EAGAIN
または EWOULDBLOCK
エラーが発生します。
書き込み時に書き込める領域がない場合にも
EAGAIN
または EWOULDBLOCK
エラーが発生します。
val clear_nonblock : file_descr -> unit
val set_close_on_exec : file_descr -> unit
与えられたファイル記述子の close-on-exec フラグを立てます。
close-on-exec フラグの立ったファイル記述子は、現在のプロセスが exec*
系の関数を使って別のプログラムを起動すると自動的に閉じられます。
val clear_close_on_exec : file_descr -> unit
ディレクトリ
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_stdin
、 new_stdout
、 new_stderr
の記述子に接続されます。例えば new_stdout
に stdout
を渡すと新しいプロセスの標準出力はリダイレクトされず、現在のプロセスと同じになります。
実行ファイル 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_stderr
は
Unix.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
val close_process_out : out_channel -> process_status
val close_process : in_channel * out_channel -> process_status
val close_process_full : in_channel * out_channel * in_channel ->
process_status
シンボリックリンク
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 |
val lockf : file_descr -> lock_command -> int -> unit
lockf fd cmd size
は
fd
として open されているファイルの領域をロックします。
ロックされるのは、現在の読み込み/書き込み位置から、
size
が正の場合には前方に
size
バイト、負の場合には後方に
size
バイト、 0 の場合はファイル終端までの領域になります。
書き込みロックは、他のプロセスがその領域に対して読み込み・書き込みロックを獲得できないようにします。
読み込みロックは、他のプロセスはその領域に対する書き込みロックを獲得できませんが、読み込みロックは獲得できます。
F_LOCK
と F_TLOCK
コマンドは指定の領域を書き込みロックしようとし、
F_RLOCK
と F_TRLOCK
コマンドは指定の領域を読み込みロックしようとします。
他のプロセスが既にロックを獲得していて現在のプロセスがロックを獲得できない場合、
F_LOCK
と F_RLOCK
はロックが解除されるまでブロックし、
F_TLOCK
と F_TRLOCK
は即座に例外を発生させ失敗します。
F_ULOCK
は現在のプロセスが指定の領域に獲得しているすべてのロックを解除します。
F_TEST
は実際にロックを行なわずに指定の領域に対して書き込みロックを獲得できるか検査します。
F_TEST
はロックが獲得できる場合には直ちに返り、そうでない場合には失敗します。
シグナル
注意: シグナルハンドラの設定は Sys.signal
と Sys.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
はブロックされるシグナルの集合を変更します。
cmd
が SIG_SETMASK
の場合、ブロックされるシグナルは sigs
に指定されたものになります。
cmd
が SIG_BLOCK
の場合、 sigs
中のシグナルがブロックされるシグナルに追加されます。
cmd
が SIG_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 ; |
|
tm_min : int ; |
|
tm_hour : int ; |
|
tm_mday : int ; |
|
tm_mon : int ; |
|
tm_year : int ; |
|
tm_wday : int ; |
|
tm_yday : int ; |
|
tm_isdst : bool ; |
}
時刻と日付を表す型。
val time : unit -> float
1970 年 1 月 1 日 00:00:00 GMT から現在までの経過秒数。
val gettimeofday : unit -> float
val gmtime : float -> tm
Unix.time
の返した秒数を日付と時刻に変換します。
UTC (協定世界時)すなわち GMT を仮定しています。
val localtime : float -> tm
val mktime : tm -> float * tm
tm
引数で指定された日付と時刻を
Unix.time
の返す秒数に変換します。
tm
の
tm_isdst
、
tm_wday
、
tm_yday
フィールドは無視されます。
さらに、
tm
の
tm_wday
、
tm_yday
、
tm_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 |
| |
ITIMER_VIRTUAL |
| |
ITIMER_PROF |
インターバルタイマーの種類。
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
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 |
| |
PF_INET |
| |
PF_INET6 |
ソケットドメインの型。 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 |
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 |
| |
SO_KEEPALIVE |
| |
SO_DONTROUTE |
| |
SO_OOBINLINE |
| |
SO_ACCEPTCONN |
| |
TCP_NODELAY |
| |
IPV6_ONLY |
type
socket_int_option =
| |
SO_SNDBUF |
| |
SO_RCVBUF |
| |
SO_ERROR |
| |
SO_TYPE |
| |
SO_RCVLOWAT |
| |
SO_SNDLOWAT |
type
socket_optint_option =
type
socket_float_option =
| |
SO_RCVTIMEO |
| |
SO_SNDTIMEO |
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
val setsockopt_int : file_descr -> socket_int_option -> int -> unit
val getsockopt_optint : file_descr -> socket_optint_option -> int option
val setsockopt_optint : file_descr -> socket_optint_option -> int option -> unit
val getsockopt_float : file_descr -> socket_float_option -> float
val setsockopt_float : file_descr -> socket_float_option -> float -> unit
val getsockopt_error : file_descr -> error option
与えられたソケットに対応づけられたエラー状態を返し、エラー状態をリセットします。
高レベルネットワーク接続関数
val open_connection : sockaddr -> in_channel * out_channel
指定されたアドレスのサーバーに接続し、サーバーに接続したバッファ付きのチャネルを返します。
正しく同期していることを保証するためには適切なタイミングで出力チャネルに
flush
を呼び出すようにしてください。
val shutdown_connection : in_channel -> unit
val establish_server : (in_channel -> out_channel -> unit) ->
sockaddr -> unit
指定されたアドレスでサーバーを確立します。
第一引数に指定した関数は、各接続ごとに引数としてクライアントに接続したバッファ付きのチャネルを受け取ります。
接続ごとに新たなプロセスが作られます。
Unix.establish_server
関数は通常は返りません。
ホストデータベースとプロトコルデータベース
type
host_entry = {
}
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 = {
}
type
getaddrinfo_option =
| |
AI_FAMILY of socket_domain |
| |
AI_SOCKTYPE of socket_type |
| |
AI_PROTOCOL of int |
| |
AI_NUMERICHOST |
| |
AI_CANONNAME |
| |
AI_PASSIVE |
val getaddrinfo : string -> string -> getaddrinfo_option list -> addr_info list
getaddrinfo host service opts
は指定されたホストと指定されたサービスで通信するためのソケットパラメータとアドレスを記述した
Unix.addr_info
のリストを返します。
ホストやサービス名が未知の場合や、
opts
で表された制約を満たせない場合、戻り値は空リストになります。
host
はホスト名か、 IP アドレスの文字列表現です。
host
には空文字列を渡すこともできます。
この場合は、 opts
が AI_PASSIVE
を含むかどうかに応じて any アドレスまたは loopback アドレスが使われます。
service
はサービス名か、ポート番号の文字列表現です。
service
にも空文字列を指定することができ、その場合には戻り値のポートフィールドは 0 になります。
opts
は空リストにすることもできますが、これを使って呼び出し側が戻り値に特定のソケットドメイン(例えば、IPv6 のみ、または IPv4 のみ)を強制したり、特定の種類のソケット(例えば、TCP のみ、 UDP のみ)を強制したりすることもできます。
type
name_info = {
|
ni_hostname : string ; |
|
ni_service : string ; |
}
type
getnameinfo_option =
| |
NI_NOFQDN |
| |
NI_NUMERICHOST |
| |
NI_NAMEREQD |
| |
NI_NUMERICSERV |
| |
NI_DGRAM |
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 ; |
|
mutable c_brkint : bool ; |
|
mutable c_ignpar : bool ; |
|
mutable c_parmrk : bool ; |
|
mutable c_inpck : bool ; |
|
mutable c_istrip : bool ; |
|
mutable c_inlcr : bool ; |
|
mutable c_igncr : bool ; |
|
mutable c_icrnl : bool ; |
|
mutable c_ixon : bool ; |
|
mutable c_ixoff : bool ; |
|
mutable c_opost : bool ; |
|
mutable c_obaud : int ; |
|
mutable c_ibaud : int ; |
|
mutable c_csize : int ; |
|
mutable c_cstopb : int ; |
|
mutable c_cread : bool ; |
|
mutable c_parenb : bool ; |
|
mutable c_parodd : bool ; |
|
mutable c_hupcl : bool ; |
|
mutable c_clocal : bool ; |
|
mutable c_isig : bool ; |
|
mutable c_icanon : bool ; |
|
mutable c_noflsh : bool ; |
|
mutable c_echo : bool ; |
|
mutable c_echoe : bool ; |
|
mutable c_echok : bool ; |
|
mutable c_echonl : bool ; |
|
mutable c_vintr : char ; |
|
mutable c_vquit : char ; |
|
mutable c_verase : char ; |
|
mutable c_vkill : char ; |
|
mutable c_veof : char ; |
|
mutable c_veol : char ; |
|
mutable c_vmin : int ; |
|
mutable c_vtime : int ; |
|
mutable c_vstart : char ; |
|
mutable c_vstop : char ; |
}
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
呼び出したプロセスを新しいセッションに割り当て、制御端末から切り離します。