2016-07-30 101 views
0

我叫Unix.mkdir "test" 0o000和预期的目录与rwxrwxrwx权限,但有-------w-。 呼叫Unix.mkdir "test" (Unix.umask 0o000)后,我有同样的结果。Unix.mkdir是否正确设置了umask?

我不明白为什么。

如何创建目录与rwx所有与OCaml Unix模块的权限?

+0

'Unix.umask'的返回值是'umask'的旧值。此外,通过“umask”值作为您想要的权限并没有多大意义。在某种意义上,'umask'值和权限值是用相反的含义指定的。 –

回答

5

您指定的值为Unix.mkdir是您希望目录拥有的权限,如您当前的umask修改的那样。如果您指定0o000,您应该期望创建一个没有任何人权限的目录。由于umask只能在拒绝一些额外的权限,所以您的报告结果是不可能的,至少在Unix中。

请注意,Unix.mkdir的第二个参数不是umask值,而是权限值。 OCaml文档说要查看umask的原因是,您意识到指定的值将由您的umask修改。它的工作原理是这样的:除了在您的umask中设置设置为的任何位将是清除中的结果权限以外,将使用您指定的权限创建目录。换句话说,umask指定您希望默认拒绝的访问。

如果你真的想创建一个让大家都权限的目录,你需要确保你的umask是0.这是一个合理的umask0o022会发生什么:

$ 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的要求。