0

我调用Unix.mkdir "test" 0o000并期望具有rwxrwxrwx权限的目录,但有-------w-. 通话后Unix.mkdir "test" (Unix.umask 0o000)我有相同的结果。

我不明白为什么。

如何使用 OCaml模块创建具有rwx所有人权限的目录?Unix

4

1 回答 1

6

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

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

如果你真的想创建一个对每个人都允许的所有权限的目录,你需要确保你的权限是 0。下面是一个合理的值umask会发生什么: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在创建目录之前将 your 设置为 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

umask设置为 0 时,所创建目录的权限将与对 的调用中指定的权限完全相同Unix.mkdir

于 2016-07-30T20:38:30.173 回答