Чтение физических дисков в Mac OS X - PullRequest
3 голосов
/ 14 декабря 2011

В приведенном ниже коде:

#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 Ответ

2 голосов
/ 15 декабря 2011

Это почти наверняка проблема с разрешениями.Предоставление обычным пользователям любого доступа к необработанным дискам - это дыра в безопасности (пользователь может обойти все права доступа к файлам и читать все, что они хотят на диске), поэтому ни одна ОС не предоставляет доступ к необработанному диску обычным пользователям.

В примерениже 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 или использовать API OS X для повышения привилегий.

...