21. unix ライブラリ: UNIX システムコール

unix ライブラリを使うと Objective Caml プログラムから多くの Unix システムコールや、システムに関係したライブラリ関数を使用することができるようになります。この章では unix モジュールで提供される関数を簡単に解説します。これらの関数の動作について詳しいことは Unix の man ページのセクション 2 及び 3 を参照してください。

すべての Un*x でこれらの関数がすべて利用可能であるとは限りません。使用できない関数がある場合、その関数を呼び出すと Invalid_arg 例外が発生します。

unix ライブラリを使用するプログラムは次のようにリンクしてください。

ocamlc other options unix.cma other files
ocamlopt other options unix.cmxa other files
  

unix ライブラリを対話式システムで利用する場合は以下のようにしてください。

ocamlmktop -o mytop unix.cma
./mytop
  

(C ライブラリのダイナミックリンクをサポートしているプラットフォームでは) ocaml を起動したあと #load "unix.cma";; と入力しても構いません。

[注記]Windows

Windows 版 Objective Caml では Unix システムコールをかなり完璧にエミュレーションしたものが提供されています。Windows 環境でサポートされていない関数についてのより詳しい情報は本章の末尾に挙げてあります。

[注記]Windows

Cygwin 版 Objective Caml では Unix モジュールの関数はすべて完全に実装されています。 Win32 ネイティブ版では一部しか実装されていません。以下の関数は Win32 版では一部又は全部が実装されていません。ここに記載されていない関数は完全に実装されていて、この章で既に解説したように動作します。

関数 コメント
fork 実装されていません。 create_process かスレッドを使ってください。
wait 実装されていません。 waitpid を使ってください。
waitpid 与えられた PID のみを待つことができます。任意の子プロセスの終了を待つことはできません。
getppid 実装されていません(Windows 環境では無意味です)。
nice 実装されていません。
truncate, ftruncate 実装されていません。
link, symlink, readlink 実装されていません(Windows にリンクはありません)。
access 実行パーミッション X_OK をテストすることはできません。 代わりに読み込みパーミッションをテストします。
fchmod 実装されていません。
chown, fchown 実装されていません(DOS のファイルシステムでは意味を持ちません)。
umask 実装されていません。
set_nonblock, clear_nonblock ダミー関数として実装されています。非同期 I/O の代わりにスレッドを使ってください。
rewinddir 実装されていません。代わりにディレクトリを開き直してください。
mkfifo 実装されていません。
kill, pause 実装されていません(Windows にはプロセス間シグナルはありません)。
alarm, times 実装されていません。
getitimer, setitimer 実装されていません。
getuid, getgid 常に 1 が返ります。
getgid, getegid, getgroups 実装されていません。
setuid, setgid 実装されていません。
getpwnam, getpwuid 常に Not_found 例外が発生します。
getgrnam, getgrgid 常に Not_found 例外が発生します。
type socket_domain PF_UNIX ドメインと PF_INET6 ドメインはサポートされていません。 PF_INET は完全にサポートされています。
establish_server 実装されていません。スレッドを使ってください。
端末関数 (tc*) 実装されていません。