Как автоматически монтировать и читать USB-накопитель на Raspberry Pi в C? ⇐ Linux
Как автоматически монтировать и читать USB-накопитель на Raspberry Pi в C?
Я пытаюсь автоматически подключить USB-накопитель к моему Raspberry Pi, после подключения он должен прочитать значения в текстовом документе и отобразить значения на консоли. У меня возникли проблемы с определением того, где находится или должен быть указан путь монтирования, из всего, что я читал в Интернете, я должен указывать точку монтирования на /mnt/usb, однако когда я пытаюсь запустить приведенный ниже код, он не может смонтироваться привод. Однако мне удастся добиться успеха, если я изменю точку монтирования на /media/user/, и диск окажется подключенным. Но затем он не может найти файл на диске, диск в проводнике отображается в /media/user/8,1 ГБ Volume/example.txt, однако изменение точки монтирования для включения тома 8,1 ГБ, похоже, не работает. и я получаю сообщение об ошибке «плохое монтирование».
Любая подсказка о том, что я делаю неправильно, у меня не было большого опыта работы с Linux или C, поэтому все это для меня в новинку, и я не уверен, что указываю нужные места или следую правильной процедуре. . Есть мысли, где я ошибаюсь?
#include #include #include #include bool isMounted(const char *mountPoint) { ФАЙЛ *mountsFile = fopen("/proc/mounts", "r"); если (mountsFile == NULL) { perror("Не удалось открыть /proc/mounts"); выход (1); } строка символов[256]; while (fgets(line, sizeof(line), mountsFile) != NULL) { if (strstr(line, mountPoint) != NULL) { fclose (mountsFile); вернуть истину; } } fclose (mountsFile); вернуть ложь; } интервал основной() { const char *mountPoint = "/media/user"; //был указан на "/mnt/usb", но выдала ошибку монтирования const char *usbDevice = "/dev/sda1"; const char *fileName = "example.txt"; // Подключаем USB-накопитель, если он еще не подключен если (!isMounted(mountPoint)) { символ mountCommand[256]; snprintf(mountCommand, sizeof(mountCommand), "sudo mount %s %s", usbDevice, mountPoint); система (команда монтирования); } // Проверяем, прошло ли успешное монтирование если (!isMounted(mountPoint)) { printf("Не удалось подключить USB-накопитель.\n"); возврат 1; } // Читаем файл с подключенного USB-накопителя символьный путь к файлу [256]; snprintf(filePath, sizeof(filePath), "%s/%s", mountPoint, fileName); ФАЙЛ *file = fopen(filePath, "r"); если (файл == NULL) { printf("Не удалось открыть файл.\n"); возврат 1; } // Читаем и печатаем содержимое файла чар ч; while ((ch = fgetc(file)) != EOF) { printf("%c", ch); } fзакрыть (файл); // Отключаем USB-накопитель символ umountCommand[256]; snprintf(umountCommand, sizeof(umountCommand), "sudo umount %s", mountPoint); система (umountCommand); вернуть 0; }
Я пытаюсь автоматически подключить USB-накопитель к моему Raspberry Pi, после подключения он должен прочитать значения в текстовом документе и отобразить значения на консоли. У меня возникли проблемы с определением того, где находится или должен быть указан путь монтирования, из всего, что я читал в Интернете, я должен указывать точку монтирования на /mnt/usb, однако когда я пытаюсь запустить приведенный ниже код, он не может смонтироваться привод. Однако мне удастся добиться успеха, если я изменю точку монтирования на /media/user/, и диск окажется подключенным. Но затем он не может найти файл на диске, диск в проводнике отображается в /media/user/8,1 ГБ Volume/example.txt, однако изменение точки монтирования для включения тома 8,1 ГБ, похоже, не работает. и я получаю сообщение об ошибке «плохое монтирование».
Любая подсказка о том, что я делаю неправильно, у меня не было большого опыта работы с Linux или C, поэтому все это для меня в новинку, и я не уверен, что указываю нужные места или следую правильной процедуре. . Есть мысли, где я ошибаюсь?
#include #include #include #include bool isMounted(const char *mountPoint) { ФАЙЛ *mountsFile = fopen("/proc/mounts", "r"); если (mountsFile == NULL) { perror("Не удалось открыть /proc/mounts"); выход (1); } строка символов[256]; while (fgets(line, sizeof(line), mountsFile) != NULL) { if (strstr(line, mountPoint) != NULL) { fclose (mountsFile); вернуть истину; } } fclose (mountsFile); вернуть ложь; } интервал основной() { const char *mountPoint = "/media/user"; //был указан на "/mnt/usb", но выдала ошибку монтирования const char *usbDevice = "/dev/sda1"; const char *fileName = "example.txt"; // Подключаем USB-накопитель, если он еще не подключен если (!isMounted(mountPoint)) { символ mountCommand[256]; snprintf(mountCommand, sizeof(mountCommand), "sudo mount %s %s", usbDevice, mountPoint); система (команда монтирования); } // Проверяем, прошло ли успешное монтирование если (!isMounted(mountPoint)) { printf("Не удалось подключить USB-накопитель.\n"); возврат 1; } // Читаем файл с подключенного USB-накопителя символьный путь к файлу [256]; snprintf(filePath, sizeof(filePath), "%s/%s", mountPoint, fileName); ФАЙЛ *file = fopen(filePath, "r"); если (файл == NULL) { printf("Не удалось открыть файл.\n"); возврат 1; } // Читаем и печатаем содержимое файла чар ч; while ((ch = fgetc(file)) != EOF) { printf("%c", ch); } fзакрыть (файл); // Отключаем USB-накопитель символ umountCommand[256]; snprintf(umountCommand, sizeof(umountCommand), "sudo umount %s", mountPoint); система (umountCommand); вернуть 0; }
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение