Как запустить программу на C ++, когда вставлена ​​флешка

У меня есть программа на C ++, которая обращается к флеш-накопителям USB. Работает на вставленной в данный момент флешке. Обычная программа на C ++ не выполняется, пока мы ее не запустим. Но я хотел, чтобы программа запускалась автоматически при установке флешки. Как я могу это сделать?

9
задан 21 May 2015 в 12:27

2 ответа

Для общего использования, Если требуется запустить программу для какого-либо устройства хранения данных USB. Используйте драйвер для соответствия правила.

  1. Добавляют udev, файл

    sudo nano /etc/udev/rules.d/90-detect-storage.rules
    
  2. правил Добавляет это правило

    ACTION=="add", DRIVERS=="usb-storage", DRIVER=="sd", RUN+="/pathto/yourprogram"
    

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

    ACTION=="add", DRIVERS=="usb-storage", DRIVER=="sd", RUN+="/pathto/yourprogram $env{ID_VENDOR_ID} $env{ID_MODEL_ID}"
    
  3. Перезагрузка все правила

    sudo udevadm control --reload-rules
    
  4. Отключают и повторно включают Примечания флеш-накопителя

:

  • я использовал это правило только для тестирования, которые создают журнал, когда правило инициировано:

    ACTION=="add", DRIVERS=="usb-storage", DRIVER=="sd", RUN+="/bin/sh -c 'echo $env{ID_VENDOR_ID} $env{ID_MODEL_ID} >> /home/username/Desktop/usb-storage.log'"
    
  • можно прокомментировать правила, которые Вы не хотите путем добавления # к началу строки. Файл правил может содержать несколько правил.

  • Для проверки всего доступного env переменные используйте:

    ACTION=="add", DRIVERS=="usb-storage", RUN+="/bin/sh -c 'echo == >> /home/username/Desktop/usb-storage-env.log; env >> /home/username/Desktop/usb-storage-env.log'"
    
  • Для проверки на параметры для использования для соответствия правила работайте:

    sudo udevadm info --name=/dev/sdb1 --attribute-walk
    

Ссылки:

0
ответ дан 21 May 2015 в 12:27

Можно использовать udev для выполнения команды albitrary. Заставить его работать, создать правило в /etc/udev/rules.d/:

sudo nano /etc/udev/rules.d/my-usb-device.rules

И войдите:

ACTION=="add", ATTRS{idProduct}=="XXXX", ATTRS{idVendor}=="YYYY", RUN+="/location/of/my/command"

ПРИМЕЧАНИЕ: XXXX и YYYY значения будут приняты от lsusb вывод.

0
ответ дан 21 May 2015 в 12:27

Другие вопросы по тегам:

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