拖动跟踪期间的读/写访问、POSIX 权限和沙箱
Posted
技术标签:
【中文标题】拖动跟踪期间的读/写访问、POSIX 权限和沙箱【英文标题】:Read/write access, POSIX permissions and sandbox during drag tracking 【发布时间】:2013-07-25 14:22:55 【问题描述】:我有一个问题,我试图确定一个目录在拖动跟踪期间是否具有写访问权限,但调用 NSFileManager.isWritableFileAtPath 之类的方法不起作用,因为它们返回沙箱下的写权限。拖动完成后,当前进程(我的应用程序)将假定对目录的正常访问(由 POSIX 权限决定)但我需要提前知道实际权限是什么,以便我可以在拖动操作光标中反映这一点.
我找到了如何使用 NSFileManager 获取 POSIX 权限,但我不知道如何从该值中仅读取写入权限部分(以小数形式返回,如 420)。我以为会有一些简单的位掩码或辅助函数来转换值,但我在任何地方都找不到它们。
感谢您的帮助。
【问题讨论】:
【参考方案1】:#define
s 在包含文件 <sys/stat.h>
中可用 - 请参阅手册第 2 节中的 chmod
。整数 420 是所有者 rw-r--r-- - r/w,其他人都读。
【讨论】:
我看到了定义并阅读了 man chmod,但我仍然不明白如何从任何整数(例如 420)派生单个写入所有者掩码。例如,有“S_IWUSR 0000200”。这是否意味着任何数字的第 3 位数字是“2”时用户可写?谢谢。#define
常量是您在问题中引用的位掩码。使用按位与运算等来测试单个权限,例如if( (permissions & S_IWUSR) != 0 ) ...
谢谢,我现在明白了,但我认为沙盒返回的权限与我在 Finder 中看到的权限不同。例如 /Developer 返回 509(来自 NSFilePosixPermissions 属性键),其中 S_IWUSR 表示不写,即使 Finder 说读/写(stat /Developers 说 drwxrwxr-x)。这意味着我什至不知道如何获得沙盒之外的原始权限。
509 十进制是 1FD 十六进制或 111111101 二进制 - 即 rwxrwxr-x。 S_IWUSR 是 0000200 八进制或 010000000 二进制。按位和那些,使用&
,你得到010000000,它是非零的——在这种情况下表示用户写权限。
我不确定我在这里得到了正确的值。 “stat /System”返回所有者可写的“drwxr-xr-x”对吗?我得到整数 493(八进制 755),它是所有者可写的(按位与 S_IWUSR 确认)但 Finder 获取信息窗口显示只读,果然我无法写入此目录。这解释了为什么我觉得我很困惑。你的 /System 也是这样吗?谢谢。以上是关于拖动跟踪期间的读/写访问、POSIX 权限和沙箱的主要内容,如果未能解决你的问题,请参考以下文章