文件权限标志如何在 OCaml Pervasives 中工作?
How does a file permissions flag work in OCaml Pervasives?
我一直在尝试将一些文本写入 OCaml 中的文件,但偶然发现了以下问题。
使用 open_out_gen
打开频道允许为新创建的文件设置权限以及打开文件的模式。
例如:
let write_to_file perm =
let oc = open_out_gen [Open_creat; Open_append] perm ((Int.to_string perm )^".txt") in
Printf.fprintf oc "%s\n" "yolo";
close_out oc;;
为名为 .txt 的文件打开一个频道,并在其末尾附加“yolo”。
检查新建文件的权限时出现问题。直觉上我会假设 ls -l
显示的权限标志将等于 perm
的值。我的意思是,如果我用 write_to_file 777
调用上面的函数,新文件应该有所有者、组和其他人的 rwx 标志。
但是当我检查它的权限时它显示“-r----x--t”所以文件可以被所有者读取,由所有者组中的每个人执行并且它只能被所有者删除文件。
我的问题是为什么会这样,我怎样才能真正为每个人授予像 rwx 这样的权限?
您正在使用 777
作为权限,这是一个以 10 为底的数字。在通常用于数字文件权限的 base-8 表示法中,这将是 1411
,它对应于您描述的符号权限 - 粘性位、用户可读、组和其他可执行文件(未显示其他可执行文件位由 ls -l
因为粘性位 t
但它就在那里)。
在 ocaml 中,base-8 文字以 0o
为前缀,因此 write_to_file 0o777
将为您提供所需的权限。
我一直在尝试将一些文本写入 OCaml 中的文件,但偶然发现了以下问题。
使用 open_out_gen
打开频道允许为新创建的文件设置权限以及打开文件的模式。
例如:
let write_to_file perm =
let oc = open_out_gen [Open_creat; Open_append] perm ((Int.to_string perm )^".txt") in
Printf.fprintf oc "%s\n" "yolo";
close_out oc;;
为名为
检查新建文件的权限时出现问题。直觉上我会假设 ls -l
显示的权限标志将等于 perm
的值。我的意思是,如果我用 write_to_file 777
调用上面的函数,新文件应该有所有者、组和其他人的 rwx 标志。
但是当我检查它的权限时它显示“-r----x--t”所以文件可以被所有者读取,由所有者组中的每个人执行并且它只能被所有者删除文件。
我的问题是为什么会这样,我怎样才能真正为每个人授予像 rwx 这样的权限?
您正在使用 777
作为权限,这是一个以 10 为底的数字。在通常用于数字文件权限的 base-8 表示法中,这将是 1411
,它对应于您描述的符号权限 - 粘性位、用户可读、组和其他可执行文件(未显示其他可执行文件位由 ls -l
因为粘性位 t
但它就在那里)。
在 ocaml 中,base-8 文字以 0o
为前缀,因此 write_to_file 0o777
将为您提供所需的权限。