在下面给出的代码中:
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/disk.h>
int main(int argc, char **argv)
{
int fd = open("/dev/disk0", O_RDONLY, 0);
...
}
fd
有 -1
用于物理硬盘驱动器,但它适用于 USB/闪存驱动器。为什么会这样?
最佳答案
这几乎可以肯定是权限问题。授予普通用户对原始磁盘的任何访问权限是一个安全漏洞(用户可以规避所有文件权限并在磁盘上读取他们想要的任何内容),因此没有操作系统向普通用户提供原始磁盘访问权限。
在下面的示例中,disk0
是我的内部硬盘驱动器和disk3
是一个USB闪存驱动器。在 OS X 中,即使是“管理员”也不属于 operator
允许原始磁盘访问固定硬盘驱动器的组。
pip$ ls -ltr /dev/disk*<br/>
brw-r----- 1 root operator 14, 3 Dec 12 10:14 /dev/disk0s3<br/>
brw-r----- 1 root operator 14, 2 Dec 12 10:14 /dev/disk0s2<br/>
brw-r----- 1 root operator 14, 1 Dec 12 10:14 /dev/disk0s1<br/>
brw-r----- 1 root operator 14, 0 Dec 12 10:14 /dev/disk0<br/>
br--r----- 1 root operator 14, 4 Dec 14 15:15 /dev/disk1<br/>
brw-r----- 1 root operator 14, 7 Dec 14 15:15 /dev/disk2s2<br/>
br--r----- 1 root operator 14, 6 Dec 14 15:15 /dev/disk2s1<br/>
brw-r----- 1 root operator 14, 5 Dec 14 15:15 /dev/disk2<br/>
brw-r----- 1 pip operator 14, 9 Dec 14 15:18 /dev/disk3s1<br/>
brw-r----- 1 pip operator 14, 8 Dec 14 15:18 /dev/disk3
如果您的应用确实需要原始磁盘访问权限,您需要以 root 用户身份使用 sudo
运行它, 将自己添加到 operator
组,或使用 OS X API 进行权限提升。
关于objective-c - 在 Mac OS X 中读取物理驱动器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8505213/