在下面给出的代码中:
#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 /闪存驱动器。为什么会这样?
答案 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>