Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
 Аватар для Jman
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860

Получение имени съемного накопителя

20.12.2018, 12:01. Показов 2827. Ответов 45
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго дня всем! Не знал в каком разделе написать. Знаний в области Линукса мало...
Мне необходимо написать простую программу, начал на Сишарпе. Для отлова событий изменения ядра использую udev API. Вызываю сишные методы.
Я вот не пойму, правильно - ли я выбрал направление с работой через udev? У меня с горем пополам получилось получить событие action (add/remove), но как получить имя я не знаю. Флешка у меня распознается как dev/sda, вторая как /dev/sdb
Путь в syspath = "/sys/devices/soc0/soc/2100000.aips-bus/2184000.usb/ci_hdrc.0"/ Все это дело автомонтируется в /media/usb0-usb7. Ломаю голову, как же получить имя диска?
Нашел простой пример, но я так понимаю что он не даст мне имя по типу /dev/sda или /mount/usb
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
    fd_set fds;
        struct timeval tv;
        int ret;
        
        FD_ZERO(&fds);
        FD_SET(fd, &fds);
        tv.tv_sec = 0;
        tv.tv_usec = 0;
        
        ret = select(fd+1, &fds, NULL, NULL, &tv);
        
        /* Check if our file descriptor has received data. */
        if (ret > 0 && FD_ISSET(fd, &fds)) {
            printf("\nselect() says there should be data\n");
            
            /* Make the call to receive the device.
               select() ensured that this will not block. */
            dev = udev_monitor_receive_device(mon);
            if (dev) {
                printf("Got Device\n");
                printf("   Node: %s\n", udev_device_get_devnode(dev));
                printf("   Subsystem: %s\n", udev_device_get_subsystem(dev));
                printf("   Devtype: %s\n", udev_device_get_devtype(dev));
 
                printf("   Action: %s\n", udev_device_get_action(dev));
                udev_device_unref(dev);
            }
            else {
                printf("No Device from receive_device(). An error occured.\n");
            }
Для получения событий изменения я дергаю функцию udev_device_get_action(...)
В общем, запутался. Прошу помощи именно в теории, как правильно сделать и какой инструмент ОС задействовать.
ПС: Сделал так же вариант хардкода, когда имя внешнего накопителя константное, так как использую только 1 порт usb (/media/usb1), но вдруг с системой что станет и имя изменится...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.12.2018, 12:01
Ответы с готовыми решениями:

Определение буквы съемного диска(флэшки) по имени или серийному номеру (без WMIC). Простой способ
Интересовался данной темой и что-то в гугле не нашел (мож забанили). Сегодня осенило: Поиск по имени: set...

Получение имени панели
Всем привет. У меня есть список панелей List<Panel> Panel_My = new List<Panel>(); Добавление панелей происходит Panel_My.Add(new...

Получение имени пользователя пк по ip
Есть ли возможность узнать текущее имя пользователя пк по IP, например 178.1##.5.## - Дима?...

45
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
22.12.2018, 20:52
Студворк — интернет-сервис помощи студентам
На сях для юсб флэшки будет как-то так:
C
1
2
3
4
struct udev_monitor *mon;
mon = udev_monitor_new_from_netlink(udev, "udev");
udev_monitor_filter_add_match_subsystem_devtype(mon, "block", NULL); 
udev_monitor_filter_add_match_subsystem_devtype(mon, "usb","usb-device");
1
 Аватар для Jman
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
22.12.2018, 21:31  [ТС]
Цитата Сообщение от prik Посмотреть сообщение
На сях для юсб флэшки будет как-то так:
В понедельник попробую портировать. Отпишусь о результате.
0
 Аватар для Jman
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
24.12.2018, 10:10  [ТС]
Итак, что имею после добавления фильтров. Теперь все ок в принципе
C#
1
2
3
4
5
6
7
8
9
10
# mono usb.exe
udev Action test
remove
/dev/sda
block
disk
add
/dev/sda
block
disk
А вот интересно, теги могут измениться как устройства? Если произойдет обновление системы например? Или это маловероятно?
0
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
25.12.2018, 14:40
Цитата Сообщение от Jman Посмотреть сообщение
А вот интересно, теги могут измениться как устройства?
Тэги это имя устройства? Если да, то как я понимаю теоретически могут, например при обновлении BIOS. Но можно прибить гвоздями через правила udev
1
 Аватар для Jman
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
25.12.2018, 14:43  [ТС]
Цитата Сообщение от prik Посмотреть сообщение
через правила udev
Огромная вам благодарность за помощь и ваше время!!!
Подскажите еще такой момент, можно ли через удев поймать имя примонтированного накопителя, допустим /media/usb1 ?
0
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
25.12.2018, 14:58
Цитата Сообщение от Jman Посмотреть сообщение
Подскажите еще такой момент, можно ли через удев поймать имя примонтированого накопителя, допустим /media/usb1 ?
Не ясен вопрос. /media/usb1 это скорее всего точка монтирования, а не устройство. Для нее udev событий не создает. Но если известна точка монтирования, то можно определить какое устройство там смонтировано.
Или это уже звучавший вопрос "что делать если флэшка вставлена до запуска программы" в другой формулировке?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.12.2018, 14:58
Помогаю со студенческими работами здесь

Получение имени каталога
Добрый день. При работе с файлами, возникает потребность превратить C:\Windows\Temp в просто Temp. Есть ли какой-либо встроенный метод...

Получение имени файла
У меня есть код для просмотра изображение при нажатии button, но не могу сделать так чтобы имя файла вместе с картинкой присваивалось label?

Получение имени окна
Админы тут баг в форуме я как то стер всю сваю тему!...

Получение имени файла
Подскажите как получить имя файла находящегося скажим в папке My music cредствами C#??

получение имени по ip из dyndns
У меня динамический реальный айпи и пользуюсь сервисом dyndns.com. Hostname, который я там привязал к своему айпи? пингуется из вне и к...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
46
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru