Unix.mkdir是否正确设置了umask?

Unix.mkdir是否正确设置了umask?,unix,ocaml,mkdir,umask,Unix,Ocaml,Mkdir,Umask,我调用了Unix.mkdir“test”0o000,期望目录具有rwxrwx权限,但拥有----w-。 调用Unix.mkdir“test”(Unix.umask 0o000)后,我得到了相同的结果 我不明白为什么 如何为所有使用OCamlUnix模块的用户创建具有rwx权限的目录?指定给Unix.mkdir的值是您希望目录拥有的权限,可由当前的umask修改。如果指定0o000,则应创建一个不允许任何人使用权限的目录。由于umask只能拒绝一些额外的权限,因此您报告的结果是不可能的,至少在Un

我调用了
Unix.mkdir“test”0o000
,期望目录具有
rwxrwx
权限,但拥有
----w-
。 调用
Unix.mkdir“test”(Unix.umask 0o000)
后,我得到了相同的结果

我不明白为什么


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

指定给
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,会发生以下情况:

$ 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
时指定的权限完全相同。您指定给
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,会发生以下情况:

$ 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
中指定的权限完全相同
Unix.umask
的返回值是
umask
的旧值。此外,将
umask
值作为所需的权限传递也没有多大意义。在某种意义上,
umask
值和权限值是使用其位的相反含义指定的。Unix.umask的返回值是
umask
的旧值。此外,将
umask
值作为所需的权限传递也没有多大意义。在某种意义上,
umask
值和权限值是使用其位的相反含义指定的。