您指定的值Unix.mkdir是您希望目录具有的权限,由您当前修改umask.如果您指定0o000,则应该创建一个没有任何权限的目录.由于umask只能拒绝一些额外的权限,所以报告的结果是不可能的,至少在Unix中是这样.
请注意,第二个参数to Unix.mkdir不是umask值,它是权限值.OCaml文档要查看的原因umask是您意识到指定的值将被您的修改umask.它的工作原理如下:将使用您指定的权限创建目录,但在结果权限中将清除您设置的任何位.换句话说,默认情况下指定您希望拒绝的访问.umaskumask
如果你真的想要创建一个允许每个人都拥有所有权限的目录,你需要确保你的umask是0.以下是合理的umask值0o022:
$ umask
0022
$ ocaml
OCaml version 4.02.1
# #load "unix.cma";;
# Unix.mkdir "testing1" 0o777;;
- : unit = ()
# ^D
$ ls -ld testing1
drwxr-xr-x 2 jeffsco staff 68 Jul 30 13:43 testing1
Run Code Online (Sandbox Code Playgroud)
生成的目录允许所有权限,但umask的0o022权限除外.(没有团体或其他人的书面许可.)
如果umask在创建目录之前将其设置为0,会发生以下情况:
$ ocaml
OCaml version 4.02.1
# #load "unix.cma";;
# Unix.umask 0o000;;
- : int = 18
# Unix.mkdir "testing2" 0o777;;
- : unit = ()
# ^D
$ ls -ld testing2
drwxrwxrwx 2 jeffsco staff 68 Jul 30 13:45 testing2
Run Code Online (Sandbox Code Playgroud)
当umask设置为0时,创建的目录的权限将完全是在调用中指定的权限Unix.mkdir.