在Mac OS X中读取物理驱动器

时间:2011-12-14 13:22:43

标签: objective-c c macos

在下面给出的代码中:

#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 /闪存驱动器。为什么会这样?

1 个答案:

答案 0 :(得分:2)

这几乎肯定是权限问题。为普通用户提供对原始磁盘的任何访问都是一个安全漏洞(用户可以规避所有文件权限并在磁盘上读取他们想要的任何内容),因此没有操作系统可以为普通用户提供原始磁盘访问。

在下面的示例中,disk0是我的内置硬盘,disk3是USB闪存盘。在OS X中,即使是“管理员”也不属于允许原始磁盘访问固定硬盘驱动器的operator组。

pip$ ls -ltr /dev/disk*
brw-r----- 1 root operator 14, 3 Dec 12 10:14 /dev/disk0s3
brw-r----- 1 root operator 14, 2 Dec 12 10:14 /dev/disk0s2
brw-r----- 1 root operator 14, 1 Dec 12 10:14 /dev/disk0s1
brw-r----- 1 root operator 14, 0 Dec 12 10:14 /dev/disk0
br--r----- 1 root operator 14, 4 Dec 14 15:15 /dev/disk1
brw-r----- 1 root operator 14, 7 Dec 14 15:15 /dev/disk2s2
br--r----- 1 root operator 14, 6 Dec 14 15:15 /dev/disk2s1
brw-r----- 1 root operator 14, 5 Dec 14 15:15 /dev/disk2
brw-r----- 1 pip operator 14, 9 Dec 14 15:18 /dev/disk3s1
brw-r----- 1 pip operator 14, 8 Dec 14 15:18 /dev/disk3

如果您的应用确实需要原始磁盘访问权限,则需要以root身份sudo运行它,将自己添加到operator组,或使用OS X API进行权限提升。< / p>