Chapter 21 The unix library: Unix システムコール
The Objective Caml system release 3.10
unix ライブラリを使うと Objective Caml プログラムから多くの Unix システムコールや、システムに関係したライブラリ関数を使用することができるようになります。この章では関数を簡潔に解説しています。これらの関数の動作について詳しいことは Unix マニュアルのセクション 2 や 3 を参照してください。
すべての種類の Unix でこれらの関数すべてを利用可能とは限りません。使用できない関数がある場合、その関数を呼ぶと例外 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 環境でサポートされていない関数についての詳しい情報はこの章の最後にあります。
- Module Unix: Unix system calls
- Module UnixLabels?: Labeled Unix system calls
Windows:
Cygwin 版 Objective Caml では Unix モジュールの関数はすべて完全に実装されています。native Win32 版では一部しか実装されていません。以下の関数は Win32 版では一部又は全部が実装されていません。ここに記載されていない関数は完全に実装されていて、この章で既に解説したように動作します。
| Functions | Comment |
| fork | 実装されていません。create_process かスレッドを使ってください。 |
| wait | 実装されていません。waitpid を使ってください。 |
| waitpid | 与えられた PID のみ待つことができます。任意の子プロセスの終了を待つことはできません。 |
| getppid | 実装されていません (Windows 環境では無意味です) 。 |
| nice | 実装されていません。 |
| in_channel_of_descr | Windows 95, 98, ME 環境ではソケットに対しては正常に動作しません。NT と 2000 環境では正常に動作します。 |
| out_channel_of_descr | 同上。 |
| truncate, ftruncate | 実装されていません。 |
| lstat, fstat | 実装されていません。 |
| link, symlink, readlink | 実装されていません (Windows にリンクはありません) 。 |
| fchmod | 実装されていません。 |
| chown, fchown | 実装されていません (DOS のファイルシステムでは意味を持ちません) 。 |
| umask | 実装されていません。 |
| set_nonblock, clear_nonblock | ダミー関数として実装されています。非同期 I/O の代わりにスレッドを使ってください。 |
| rewinddir | 実装されていません。ディレクトリを開き直してください。 |
| mkfifo | 実装されていません。 |
| select | 実装されていますが、ソケットに対してのみ動作します。その他のファイルディスクリプタを待つ必要があるならスレッドを使ってください。 |
| lockf | 実装されていません。 |
| 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_INET は完全にサポートされています。 |
| establish_server | 実装されていません。スレッドを使ってください。 |
| terminal functions (tc*) | 実装されていません。 |