第 31 章 unix 库:Unix 系统调用

unix 库为 OCaml 程序提供了许多 Unix 系统调用和系统相关的库函数。本章简要介绍了提供的函数。有关这些函数行为的更多详细信息,请参阅 Unix 手册的第 2 和 3 节。

并非所有 Unix 变体都提供所有函数。如果某些函数不可用,则在调用时将引发 Invalid_arg

使用 unix 库的程序必须按如下方式链接

        ocamlc other options -I +unix unix.cma other files
        ocamlopt other options  -I +unix unix.cmxa other files

对于 unix 库的交互式使用,请执行以下操作

        ocamlmktop -o mytop -I +unix unix.cma
        ./mytop

或(如果您的平台支持 C 库的动态链接),启动 ocaml 并键入

# #directory "+unix";;
# #load "unix.cma";;
Windows: OCaml 的 Cygwin 移植完全实现了 Unix 模块中的所有函数。原生 Win32 移植实现了其中的一部分。以下是 Win32 移植未实现或仅部分实现的函数列表。本章前面未提及的函数已完全实现,并且行为如前所述。
函数注释
fork未实现,使用 create_process 或线程
wait未实现,使用 waitpid
waitpid只能等待给定的 PID,而不是任何子进程
getppid未实现(在 Windows 下无意义)
nice未实现
truncateftruncate已实现(自 4.10.0 起)
link已实现(自 3.02 起)
fchmod未实现
chownfchown未实现(在 DOS 文件系统上没有意义)
umask未实现
access执行权限 X_OK 无法测试,它只是测试读取权限
chroot未实现
mkfifo未实现
symlinkreadlink已实现(自 4.03.0 起)
kill部分实现(自 4.00.0 起):仅实现了 sigkill 信号
sigprocmasksigpendingsigsuspend未实现(Windows 上没有进程间信号)
pause未实现(Windows 中没有进程间信号)
alarm未实现
times部分实现,不会报告子进程的计时
getitimersetitimer未实现
getuidgeteuidgetgidgetegid始终返回 1
setuidsetgidsetgroupsinitgroups未实现
getgroups始终返回 [|1|](自 2.00 起)
getpwnamgetpwuid始终引发 Not_found
getgrnamgetgrgid始终引发 Not_found
类型 socket_domainPF_INET 已完全支持;PF_INET6 已完全支持(自 4.01.0 起);PF_UNIX 自 4.14.0 起支持,但仅适用于 Windows 10 1803 及更高版本。
establish_server未实现;使用线程
终端函数 (tc*)未实现
setsid未实现