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

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

最佳答案

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

在下面的示例中,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/

相关文章:

linux - Bash sed 功能在 Mac OS X 上不起作用

linux - 如何从 docker 容器内部访问 OSX 主机上的 USB 驱动器?

objective-c - 如何删除在我的 UIViewController 上某个特定点绘制的 UIImageView?

c - 如何在 C 中发送 ctrl+z

c - 使用 SNI 在一个盒子中提供多个域

c - 在 C 数组表达式中使用时,如何理解 "add"(+) 运算符?

linux - 是否可以实现用 Apple Swift 语言编写的跨平台(在 OS X 和 Linux 上编译和运行)GUI 应用程序?

objective-c - 如何在命名空间中声明 Objective-C 中的常量?

ios - 集合 <__NSArrayM : 0x170e45d00> was mutated while being enumerated - UIImagePickerConteroller didFinishPickingMediaWithInfo

iphone - 仅限横向应用的最佳实践?