Использование open () на флешке - PullRequest
0 голосов
/ 09 июня 2011

У меня есть раздел EXT2 на моем флэш-накопителе USB, и я не могу заставить функцию C открыть (), чтобы она возвращала ничего, кроме -1. ​​

Менеджер разделов говорит, что раздел расположен в / dev/ sdb2 и мой код говорит

int fd = open("/dev/sdb2", O_RDONLY);

Но после отладки (fd == -1) и мой usb-уведомитель говорит, что он не смонтирован до или после.

Примечание:Суперблок и загрузочная секция, похоже, заполняются значениями ...

Ответы [ 2 ]

0 голосов
/ 16 июля 2011

Код для открытия флэш-накопителя правильный в моем вопросе, но программа должна быть запущена от имени суперпользователя или chmod 777 /dev/sdb2

Чтобы узнать, является ли это вашей проблемой, используйте код выше printf("Error: %s\n", strerror(errno));

0 голосов
/ 09 июня 2011

Открытие /dev/sdb2 откроет блочное устройство доступа к разделу на флэш-накопителе, что, если у вас есть файловая система в разделе, совсем не то, что вы хотите сделать. Сначала необходимо смонтировать файловую систему, после чего вы можете получить доступ к файлам внутри нее через точку монтирования. Большинство систем linux автоматически подключают флэш-накопитель при его подключении - если вы введете mount в командной строке, он покажет вам все смонтированные файловые системы и место их подключения. Это, вероятно, покажет вам строку вроде:

/dev/sdb2 on /media/usb type ext2 (...

В этом случае вы открываете /media/usb/file для доступа к file в корневом каталоге файловой системы на флэш-накопителе.

Если он не смонтирован автоматически, вам необходимо смонтировать его вручную, прежде чем получить к нему доступ - вы можете сделать это с помощью программы mount или системного вызова mount (2) из ​​программы, но обычно для этого требуется суперпользователь разрешения.

Независимо от того, как вы его монтируете, обязательно отключите его, прежде чем отсоединять флэш-накопитель, чтобы убедиться, что все данные записаны и актуальны.

...