假设我正在使用系统调用创建带有某些名称和模式参数的文件或目录,并且操作失败并显示EEXIST
.
假设我知道我当前的umask
、euid
、 和egid
,我如何判断现有文件/目录是否具有相当于操作成功时系统调用将创建的权限。
AFAIK,对于经典权限,答案将是 true iff
.st_gid == egid && .st_uid == euid && (.st_mode & 07777) == (RequestedMode & 07777 & ~CurrentUmask)
并且找到/预期的文件类型匹配。
如何将其扩展到具有访问控制列表的系统?
答案1
要将其扩展到 ACL,您可以调用acl_get_file
使用您在其中创建文件的路径,并ACL_TYPE_DEFAULT
请求该目录的默认 ACL。如果存在,则默认情况下该 ACL 将应用于您尝试创建的文件。
然后您将acl_get_file
在现有文件上使用ACL_TYPE_ACCESS
来检索文件上的实际 ACL。
我认为没有用于比较 ACL 的 ACL 函数,因此这留给读者作为练习。