我叫Unix.mkdir "test" 0o000
和预期的目录与rwxrwxrwx
权限,但有-------w-
。 呼叫Unix.mkdir "test" (Unix.umask 0o000)
后,我有同样的结果。Unix.mkdir是否正确设置了umask?
我不明白为什么。
如何创建目录与rwx
所有与OCaml Unix
模块的权限?
我叫Unix.mkdir "test" 0o000
和预期的目录与rwxrwxrwx
权限,但有-------w-
。 呼叫Unix.mkdir "test" (Unix.umask 0o000)
后,我有同样的结果。Unix.mkdir是否正确设置了umask?
我不明白为什么。
如何创建目录与rwx
所有与OCaml Unix
模块的权限?
您指定的值为Unix.mkdir
是您希望目录拥有的权限,如您当前的umask
修改的那样。如果您指定0o000
,您应该期望创建一个没有任何人权限的目录。由于umask
只能在拒绝一些额外的权限,所以您的报告结果是不可能的,至少在Unix中。
请注意,Unix.mkdir
的第二个参数不是umask值,而是权限值。 OCaml文档说要查看umask
的原因是,您意识到指定的值将由您的umask
修改。它的工作原理是这样的:除了在您的umask
中设置设置为的任何位将是清除中的结果权限以外,将使用您指定的权限创建目录。换句话说,umask
指定您希望默认拒绝的访问。
如果你真的想创建一个让大家都权限的目录,你需要确保你的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
的生成的目录具有允许的所有权限,但umask的0o022权限除外。 (为组或其他无写权限)
这里,如果你设置你的umask
0个究竟创建目录前:当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
,创建目录的权限将完全符合Unix.mkdir
的要求。
'Unix.umask'的返回值是'umask'的旧值。此外,通过“umask”值作为您想要的权限并没有多大意义。在某种意义上,'umask'值和权限值是用相反的含义指定的。 –