拖动跟踪期间的读/写访问、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】:

#defines 在包含文件 <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 权限和沙箱的主要内容,如果未能解决你的问题,请参考以下文章

git 是不是存储文件的读、写、执行权限?

对所有 Android 版本的“文档”文件夹的读/写访问权限?

如何限制/授予对子进程内存的读/写访问权限?

如何在 phpmyadmin 中设置数据库的读/写权限?

计数发生在主内存上特定内存地址的读/写次数

HDFS 权限管理