|
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
|
||||||
Получение имени съемного накопителя20.12.2018, 12:01. Показов 2783. Ответов 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
В общем, запутался. Прошу помощи именно в теории, как правильно сделать и какой инструмент ОС задействовать. ПС: Сделал так же вариант хардкода, когда имя внешнего накопителя константное, так как использую только 1 порт usb (/media/usb1), но вдруг с системой что станет и имя изменится...
0
|
||||||
| 20.12.2018, 12:01 | |
|
Ответы с готовыми решениями:
45
Определение буквы съемного диска(флэшки) по имени или серийному номеру (без WMIC). Простой способ Получение имени панели
|
|
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
|
|||||||
| 21.12.2018, 18:10 | |||||||
|
Если сама libudev, то лучше не трогать (мало ли что сломается) верните poll/select
1
|
|||||||
|
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
|
|||
| 21.12.2018, 22:09 [ТС] | |||
|
0
|
|||
|
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
|
|
| 21.12.2018, 22:32 | |
|
Jman, просто расскажите, чего хочется получить в итоге.
0
|
|
|
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
|
||||
| 22.12.2018, 10:13 [ТС] | ||||
|
- Вставил флешку, опознал что она подключена - Прочитал ее имя - Если подключена и есть имя, копирую файлы Отсюда вытекает следующее, что делать, если флешка уже была подключена до запуска программы. Можно конечно железно сделать, она всегда распознается как /dev/sda. Но мало-ли что там ОСи взбредет в голову. Возьмет и переименует. Ось обновляться не будет и она не умеет это делать автоматически, так как это buildroot. ПС - Ошибки, что я выше запостил, идут от NONBLOCK? Добавлено через 1 час 2 минуты Итак, заюзав блокирову, я перестал получать постоянные ошибки, прога выводит их только один раз, но я так и не пойму, почему летит ошибка
0
|
||||
|
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
|
|||
| 22.12.2018, 11:38 | |||
|
0
|
|||
|
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
|
||||||||||||
| 22.12.2018, 11:51 [ТС] | ||||||||||||
|
Жаль, что мы на разных "языках разговариваем" =)
Я могу привести код.
И вот вечный цикл меня просто бесит... Его конечно можно в отдельный поток засунуть и пусть там крутится. И как удев заметил устройство, кинуть ивент один раз.
0
|
||||||||||||
|
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
|
|||
| 22.12.2018, 12:15 | |||
|
Jman, вряд ли я смогу вам помочь с этим, если решите переписать на С/С++ то вэлкам
![]() На сколько я знаю, recvmsg() ERANGE сама не возвращает, разве только EMSGSIZE может. Если разберетесь с EAGAIN и ERANGE не уйдет, то можно попробовать через strace глянуть на какой ф-ции она возникает. Ну или как вариант ее возвращает библиотека/обертка. Добавлено через 2 минуты
1
|
|||
|
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
|
|||||||||||||
| 22.12.2018, 12:51 [ТС] | |||||||||||||
|
Буду ковыряться дальше, с ошибками. У меня там еще пару косяков есть, но думаю это уже мои. Добавлено через 7 минут Вот код блокинга -
0
|
|||||||||||||
|
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
|
|||
| 22.12.2018, 12:54 | |||
![]()
0
|
|||
|
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
|
|||
| 22.12.2018, 13:02 [ТС] | |||
|
Добавлено через 3 минуты Итак, EAGAIN и прочее ушло, после того как установил блокировку и стал проверять инициализацию device. Теперь сообщения приходят. Но почему-то например вставил флешку, приходит несколько сообщений подряд : add, выдернул - несколько remove. Так ведь не должно быть?
0
|
|||
|
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
|
|||||
| 22.12.2018, 13:18 | |||||
|
0
|
|||||
|
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
|
||
| 22.12.2018, 14:55 [ТС] | ||
|
Короче я попался... Я ж надеялся на сборщик мусора =) А тут ведь пол кода идет через неуправляемые ресурсы, которые надо ручками освобождать. Короче я тупо не делал девайсу и монитору что-то типо unref и free. =) Поэтому валило несколько сообщений... Сейчас четко отстреливает одно на событие. По поводу точку - это великолепно! Но я пошел дальше, и на виртуалке с Линуксом через Mono Develop прошелся отладчиком. И все стало ясно. В цикле крутилось постоянно, пока не вылетало сообщение о ошибке с памятью.
В общем такая штука. Когда подключаю флешку, идет событие на добавление + имя устройства. Потом когда линукс монтирует том, снова add и уже имя диска. Так должно быть?
0
|
||
|
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
|
||||
| 22.12.2018, 15:07 | ||||
Обхожусь vim
0
|
||||
|
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
|
||||||||||
| 22.12.2018, 16:03 [ТС] | ||||||||||
Добавлено через 1 минуту Как в этот фильтр добавить только экшн на монтирование и устройство?
И кстати, почему то в папке /etc/udev/rules.d Пусто. Но есть там и другая - /etc/udev/hwdb.d - и там все устройства (клавы, мышки и тд...) Хз, как понимать. Получается там уже все настроено?
0
|
||||||||||
|
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
|
||||
| 22.12.2018, 16:21 | ||||
|
0
|
||||
|
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
|
|||
| 22.12.2018, 16:25 [ТС] | |||
0
|
|||
|
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
|
|
| 22.12.2018, 16:33 | |
|
Попробуйте выводить больше информации о событиях, что бы понять какие это устройства с пустым devnode
0
|
|
|
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
|
||
| 22.12.2018, 16:37 [ТС] | ||
0
|
||
|
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
|
|
| 22.12.2018, 16:42 | |
|
А как сейчас фильтр выглядит?
0
|
|
|
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
|
||
| 22.12.2018, 19:34 [ТС] | ||
|
0
|
||
| 22.12.2018, 19:34 | |
|
Помогаю со студенческими работами здесь
40
Получение имени каталога
Получение имени окна Получение имени файла получение имени по ip из dyndns Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
|
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
|
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2.
Данный документ берёт данные из другого нетипового документа. . .
|
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
|
|
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать программный контроль на предмет проведения документа. . .
|
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача:
1. Реализовать контроль заполнения реквизита. . .
|
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение:
DISM / Online / Add-Capability / CapabilityName:WMIC~~~~
Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
|
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: при создании документов установить период списания автоматически. . .
|