考虑这段代码:
#load "unix.cma" ;;
print_int (Unix.umask 0) ;;
print_newline () ;;
当我运行它时,我得到 2(二进制:000.000.010)。当我使用“sudo”运行它时,我得到 18(二进制:000.010.010),正如标准库所说:http ://caml.inria.fr /pub/docs/manual-ocaml/libref/Unix.html#TYPEfile_perm 我的目的是做一个目录。如果我做到了
(Unix.umask 0) lor (0o640)
它已创建但无法访问。准确查看二进制数让我想到可以恢复默认掩码。所以,我使用这个创建一个目录:
let revert_mask m =
let user = (m land 0b000000111) in
let group = (m land 0b000111000) lsr 3 in
let other = (m land 0b111000000) lsr 6 in
(user lsl 6) lor (group lsl 3) lor other
;;
然后,我创建我的目录:
let mask = (revert_mask (Unix.umask 0)) lor 0o640 ;;
print_int mask ;;
print_newline () ;;
Unix.mkdir "foo" mask ;;
我得到 416 (0o640),对应于我的
ls -l | grep foo
:
drw-r----- 2 (me) (me) 4096 june 2 19:23 foo
然而,一个
cd foo
不会工作。
所以,我坚持使用 ubuntu 14.04 和 ocaml 4.01.0 顶层。