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

时间:2016-07-30 20:28:40

标签: unix ocaml mkdir umask

我致电Unix.mkdir "test" 0o000并预期目录中包含 rwxrwxrwx 权限但 -------w- 。 致电Unix.mkdir "test" (Unix.umask 0o000)后,我的结果相同。

我无法理解为什么。

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

1 个答案:

答案 0 :(得分:5)

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

请注意,Unix.mkdir的第二个参数不是umask值,而是权限值。 OCaml文档要查看umask的原因是您意识到指定的值将由umask修改。它的工作方式如下:将使用您指定的权限创建目录,但在umask set 的任何位将在 clear 中生成权限。换句话说,umask指定默认情况下您希望拒绝的访问。

如果你真的想要创建一个允许每个人都拥有所有权限的目录,你需要确保你的umask为0.这是umask值{{1} }}:

0o022

生成的目录允许所有权限,但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 设置为0,会发生以下情况:

umask

$ 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 设置为0时,创建目录的权限将与umask调用中指定的权限完全相同。