LINUX.ORG.RU

Как узнать, что obexd принял файл?


0

1

Добрый день,

Из приложения надо узнать, что obexd принял файл. Пока что на ум пришла идея смотреть директорий приема с помощью scandir() и сравнивать то, что было, и то, что есть, но я предполагаю, что есть более правильный способ. Гуглуние по данному вопросу ясности не добавило. Если кто решал данную задачу, укажите, в какую сторону копать, пожалуйста.

Алексей.

Попробуй копать в сторону FAMMonitorDirectory

ilovewindows ★★★★★ ()

Нужно более точно обозначать условия. Десктоп/Сервер/Ембедщина? Дистрибутив?

Однако, принимая за условия задачи дефолт по умолчанию, советую копать в сторону сервиса D-Bus. В бубунтах смотри пакеты obex-data-server, obexd-client и obexd-server

eagleivg ★★★★★ ()
Ответ на: комментарий от eagleivg

Ембеддщина. Буду смотреть D-Bus, obexd на ней сидит, может, и удастся чего выловить. FAMMonitorDirectory, на первый взгляд, избыточна для данной задачи.

alexvm ()
Ответ на: комментарий от alexvm

Насколько я помню, нужно всего-то подцепиться к шине, на которой сидит obexd и добавить матчер для получения его сообщений.

eagleivg ★★★★★ ()
Ответ на: комментарий от ilovewindows

Ты попробуй сначала dbus окучить, потом говори ,что проще.

Тоже верно. Я не говорил, что D-Bus проще, просто FAMMonitorDirectory, как мне показалось, потребует больше доп. ресурсов (не говоря о том, что её ещё надо кросскомпилять), чем D-Bus, которая и так уже установлена и работает.

alexvm ()
Ответ на: комментарий от ilovewindows

Ну, с архитектурной точки зрения мониторить директорию для организации IPC - это велосипед, ибо уже реализованно как дбасом, так и кучей других способов.

eagleivg ★★★★★ ()
Ответ на: комментарий от eagleivg

Насколько я помню, нужно всего-то подцепиться к шине, на которой сидит obexd и добавить матчер для получения его сообщений.

Мне тоже кажется, что это возможно, но гугление по поводу сигналов obexd ничего путного не дает...

alexvm ()
Ответ на: комментарий от eagleivg

А тут смотрел?

Спасибо. Попробую с помощью dbus-listen посмотреть, что шлет obexd при приеме файла, затем обработать этот сигнал у себя.

alexvm ()
Ответ на: комментарий от ilovewindows

Не зарекайся

Задача сформулирована так - файлы только через ВТ. Хотя, если заюзать inotify, то уже не будет иметь значения, как они пролезут на девайс...

alexvm ()
Ответ на: комментарий от alexvm

Не всё так просто в мире UNIX. Прога виснет на

length = read(fd, buffer, EVENT_BUF_LEN);

ждет эвента. Это что же, новый поток заводить??

alexvm ()
Ответ на: комментарий от alexvm

Ещё интересный момент:

stat() принятого файла, по приему которого возникает евент inotify, возвращает нулевой размер этого файла. Я предполагаю, что obexd сначала создает пустой файл, который и засекает inotify, а затем постепенно копирует в него данные, принятые с ВТ.

alexvm ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.