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
值和权限值是使用其位的相反含义指定的。