【问题标题】:Does Unix.mkdir set umask correctly?Unix.mkdir 是否正确设置了 umask?
【发布时间】:2016-12-05 07:33:48
【问题描述】:

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

我不明白为什么。

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

【问题讨论】:

  • Unix.umask 的返回值是umask 的旧值。此外,将umask 值作为您想要的权限传递也没有多大意义。在某种意义上,umask 值和权限值是使用相反含义指定的。

标签: unix ocaml mkdir umask


【解决方案1】:

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

请注意,Unix.mkdir 的第二个参数不是 umask 值,而是权限值。 OCaml 文档说查看umask 的原因是您意识到指定的值将被您的umask 修改。它的工作原理如下:将使用您指定的权限创建目录,除了在您的umaskset 的任何位将在结果权限中clear。换句话说,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 中指定的权限完全相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-08
    • 2013-09-06
    • 1970-01-01
    • 2011-12-09
    • 2014-09-28
    • 1970-01-01
    • 2011-10-02
    相关资源
    最近更新 更多