Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отловить появление нового съемного носителя в ОС 
V
    Опции темы
dmitrio
Дата 27.6.2012, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 9.4.2009

Репутация: нет
Всего: нет



Как программно в qt узнать, что в системе (linux) появился новый съемный носитель? ( новый имеется в виду вновь вставленный)
Думал чтото вроде сканировать папку /media, но нынче съемные носители на нестабильной ветке gentoo у меня появляются в /run/media/user, завтра я вообще не знаю где они могут появиться
Второй вариант парсить /proc/mounts, но эти оба варианта предполагают какие-то циклы или таймеры, хотелось бы какой-нибудь сигнальчик
PM MAIL   Вверх
Amp
Дата 27.6.2012, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 886
Регистрация: 17.2.2009

Репутация: 7
Всего: 17



Через DBus, например. 
PM MAIL   Вверх
dmitrio
Дата 27.6.2012, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 9.4.2009

Репутация: нет
Всего: нет



Про DBUS я то и забыл, спасибо, поизучаем
PM MAIL   Вверх
kuzulis
Дата 27.6.2012, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 5.9.2007

Репутация: нет
Всего: 1



Цитата

Через DBus, например.  


Может проще через udev под Linux, и через SetupAPI под Windows.

Кстати, на просторах инета (на gitorious.org) видел реализацию класса с подобным функционалом,
но щас припомнить не могу.

Вот, нашел: http://qt-apps.org/content/show.php/QDevic...?content=145200
PM MAIL   Вверх
dmitrio
Дата 28.6.2012, 05:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 9.4.2009

Репутация: нет
Всего: нет



Цитата(kuzulis @ 27.6.2012,  20:27)

Вот, нашел: http://qt-apps.org/content/show.php/QDevic...?content=145200

Спасибо, погляжу

P.S. Поглядел, штука хорошая, но не дает информации куда смонтировано устройство. Мне надо в программе, выбрать из списка устройств и прочитать/записать в/из него данные (т.е скопировать или записать готовый файл)
P.S.S Сейчас пришла в голову мысль, что возможно все это можно сделать стандартными средствами. Но просто изначально мысль была сделать обновление программы, которое было бы на мой взгляд наиболее простым со стороны пользователя. Пользователь заходит в меню обновить ПО, выбирает из списка смонтированный внешний накопитель ( Если вдруг в этом промежутке времени пользователь решил вставить флешку, приходит сигнал о появлении нового устройства, и далее это новое устройство добавляется в список) и нажимает кнопку обновить программу. 

Это сообщение отредактировал(а) dmitrio - 28.6.2012, 07:35
PM MAIL   Вверх
dmitrio
Дата 4.7.2012, 08:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 9.4.2009

Репутация: нет
Всего: нет



Решил распарсиванием файла /proc/mounts, по сигналу добавления нового устройства из QDeviceWatcher
PM MAIL   Вверх
tzirechnoy
Дата 4.7.2012, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 1
Всего: 16



Есть два вменяемых варианта -- один -- сделать в своей программе возможность посылки команд своим копиям из выполняемого файла. И определить, что команда newdev XXX указывает на появление носителя в XXX.

Например, каждой копии программы создавать сокеты в ~/.myprog/cmd/, и написать небольшую утилиту, которая по запуска myutil newdev XXX открывает каждый сокет из ~/.myprog/cmd/, и посылает туда команду newdev XXX.

Другой -- сделать в своей пограмме (настраиваемый) периодический вызов внешней программы, которая отдавала бы список временных носителей. Можно ещё указать в настройках, какие директории проверять самостоятельно на предмет изменений (либо через поллинг, либо через inotify, это уж как напишэшь), и вызывать этот скрипт при призаках изменений в них.
Впрочем, в качестве полумеры можно просто список директорий, в которых что-то монтируется, задавать в настройках.

Вопрос настройки соответствующих скриптов отдать системному администратору (вместе с мэйнтэйнером дистрибутива). Поскольку в каждом конкретном случае это очень простые вещи (ну, что там скриптик дёрнуть по втыканию девайса, или список подмонтированного отдать) -- но как оно у меня настроено конкретно сейчас ты всё равно не угадаешь.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0444 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.