我致电Unix.mkdir "test" 0o000
并预期目录中包含 rwxrwxrwx
权限但 -------w-
。
致电Unix.mkdir "test" (Unix.umask 0o000)
后,我的结果相同。
我无法理解为什么。
如何使用OCaml rwx
模块为所有人创建具有 Unix
权限的目录?
答案 0 :(得分:5)
您为Unix.mkdir
指定的值是您希望目录拥有的权限,由当前umask
修改。如果指定0o000
,则应该创建一个没有任何权限的目录。由于umask
只能拒绝一些额外的权限,因此您的报告结果是不可能的,至少在Unix中是这样。
请注意,Unix.mkdir
的第二个参数不是umask值,而是权限值。 OCaml文档要查看umask
的原因是您意识到指定的值将由umask
修改。它的工作方式如下:将使用您指定的权限创建目录,但在umask
中 set 的任何位将在 clear 中生成权限。换句话说,umask
指定默认情况下您希望拒绝的访问。
如果你真的想要创建一个允许每个人都拥有所有权限的目录,你需要确保你的umask
为0.这是umask
值{{1} }}:
0o022
生成的目录允许所有权限,但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
设置为0,会发生以下情况:
umask
当$ 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
设置为0时,创建目录的权限将与umask
调用中指定的权限完全相同。