Как программно обнаружить, когда устройство повышает прерывание?

GUI

Смелость

Если Вы хотите, чтобы GUI сделал это, можно сделать это с помощью Смелости.

выборка от Wiki

В выпадающем меню на Панели инструментов Устройства Смелости выберите “Wave Out” или “Stereo Mix” как входной источник. (Точное имя может отличаться, в зависимости от аудиодрайверов Вашего компьютера). В Windows, если у Вас нет опции “Wave Out” или “Stereo Mix”, или если он не запишет, перейдите к системной Панели управления и попытайтесь включить эту опцию там. Поскольку инструкции видят: Использование Панели управления на Wiki.

Streamtuner

Можно также установить streamtuner для просмотра радиостанций.

# Debian/Ubuntu
$ apt-get install streamtuner

# Fedora/CentOS/RHEL
$ yum install streamtuner

снимок экрана streamtuner

   ss of streamtuner

командная строка

Можно установить streamripper как так:

# Debian/Ubuntu
$ sudo apt-get install streamripper

# Fedora/CentOS/RHEL
$ sudo yum install streamripper
пример

Для загрузки потока просто делают следующее:

$ streamripper 

Это сохранит каждый поток в .mp3 файл.

Ссылки

4
06.09.2018, 14:26
2 ответа

Я могу попытаться поймать прерывание на более низком уровне и проинформировать приложение gtkmm.

Нет, это пространство ядра . К счастью, ядро сообщает о результатах определенных событий через интерфейсы, доступные из пользовательского пространства.

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

В любом случае, вы хотите опросить/раскопарировать/сканировать интерфейс, основанный на файловом узле ядра . Я делал это раньше в приложении (C++ GTK, на самом деле), которое отслеживает как вложенные блочные устройства, так и смонтированные файловые системы через /dev/ и /etc/mtab. Это простой, языковой агностический метод. Некоторые люди сначала находят его немного неприятным, потому что он включает в себя чтение файлов/директорий, но на самом деле эти интерфейсы не существуют на диске, так что нет больших накладных расходов на ввод/вывод, и запомните: read() - это системный вызов. Чтение файловых узлов в интерфейсах ядра равносильно API в стиле listAttachedDevices(), за исключением того, что, опять же, это агностический язык. Когда вы переходите к чтению с этих узлов, ядро передает вам информацию, которую они представляют напрямую.

В каталоге /dev прикрепленные устройства перечислены как специальные файлы узлов устройств -- например, /dev/sda. Они добавляются и удаляются ядром по мере того, как устройства подключаются и отключаются, так что если вы отследите их, опрашивая с интервалом (скажем, каждые 5 секунд), вы сможете определить, что новое, а что пропало. Единственное осложнение здесь в том, что так как нет API в стиле обратного вызова, вы должны создать свой собственный поток для этого, если вы хотите непрерывной проверки (возможно, почему gparted требует, чтобы вы нажали Refresh Devices вместо этого).

Вероятно, лучшей альтернативой /dev будет материал в /sys/block. Обратите внимание, что между /dev и /proc (см. ниже) или /sys существует значительная разница, поскольку узлы в последнем содержат /sys информацию о таких вещах, как устройства, в то время как узлы в /dev представляют собой фактическое соединение с устройством (поэтому, если вы сканируете /dev, не утруждайтесь чтением отдельных файлов, а просто отмечайте, что они существуют).

/etc/mtab теперь-в-днях это symlink (см. также переключатель -s в man ln) на /proc/self/mounts; /proc является основным швейцарским интерфейсом армейского ножевого ядра (см. man proc). Здесь перечислены смонтированные файловые системы; если вы используете автоматическое монтирование, то вещи будут появляться и исчезать оттуда, когда вещи будут подключены/отключены. Информация в /proc и /sys обычно в виде ASCII текста, поэтому вы можете посмотреть на эти файлы с помощью cat и т.д., и разобрать их с помощью функций string(stream).

WRT для других типов устройств, таких как сканер отпечатков пальцев, /sys является хорошим местом для начала -- /sys/dev содержит блок и директорию char. Блочные устройства обычно являются хранилищем; к информации о них можно получить случайный доступ . Char-устройства обмениваются информацией с системой в потоке, который включает такие вещи, как сканеры, камеры, HID-функции (устройство сопряжения с человеком, например, мыши и клавиатуры). Я заметил, что gtkmm имеет некоторые вещи высокого уровня для подключенных HID вещей, предположительно, так как они важны при взаимодействии с GUI.

3
27.01.2020, 20:58

Я одобряю ответ goldilocks . Но вместо использования системного вызова read для проверки изменений файловой системы можно использовать inotify .

Его справочная страница находится здесь и здесь .

Здесь есть отличное объяснение и пример от создателей (разработчиков) inotify .

0
27.01.2020, 20:58

Теги

Похожие вопросы