Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
6262.pdf
Скачиваний:
34
Добавлен:
13.02.2021
Размер:
6.54 Mб
Скачать

208

/**

* Проверка наличия ПО D-Bus */

dbus_error_init(&error); /** * Соединение с шиной */

connection = dbus_bus_get(DBUS_BUS_SESSION, &error); if (!connection) {

printf("Ошибка соединения с D-BUS: %s\n", error.message); dbus_error_free(&error);

return 1;

}

/**

* Вызов метода Invoke() */

call = dbus_message_new_method_call("com.Skype.API", "/com/Skype", "com.Skype.API", "Invoke");

/**

* Передача методу Invoke() значения аргумента arg */

dbus_message_append_args (call, DBUS_TYPE_STRING, &arg, DBUS_TYPE_INVALID); /** * Ожидание ответа от шины */

reply = dbus_connection_send_with_reply_and_block (connection, call, 100000, &error); if (!reply) {

printf("Ошибка вызова метода: %s\n", error.message); dbus_error_free(&error);

return 1;

}

/** * Чтение ответа сообщения от шины */

dbus_message_get_args (reply, &error, DBUS_TYPE_STRING, &response, DBUS_TYPE_INVALID); if (response != NULL)

printf("Ответ: %s\n", response); /**

* Отключение использованных объектов от шины */

dbus_message_unref(call); dbus_message_unref(reply); dbus_connection_unref(connection); return 0;

}

Замечание

Объекты ПО D-Bus не следует рассматривать в терминах ООП, поскольку понятие класса здесь не используется. Тем не менее, все объекты имеют имена и доступны, при условии ограничений доступа из среды приложений ОС.

6.5.3 Проекции ПО D-Bus на языки программирования

Приведенный выше пример использует низкоуровневый доступ к D-Bus через библиотеку libdbus.

Для эффективного использования возможностей шины применяются проекции libdbus, реализованные на различные языки.

209 Широко известны следующие проекции:

GLib API — библиотеки проекта GNU, которые можно найти по адресу: https://developer.gnome.org/gio/stable/gdbus-convenience.html;

Python API — который широко используется во всех дистрибутивах Linux: http://dbus.freedesktop.org/doc/dbus-python/doc/tutorial.html;

Qt API — которая составляет постоянную альтернативу библиотекам Glib API: http://doc.qt.io/qt-5/qtdbus-index.html.

Для доступа к шине D-Bus из языка shell используется набор утилит, которые следует внимательно изучить по руководству man:

dbus-cleanup- - используется для очистки директория от остатков сокетов; sockets

dbus-daemon - является демоном шины сообщений D-BUS;

dbus-launch - используется для запуска dbus-daemon из скрипта командной оболочки. Как правило, вызывается из скриптов, регистрирующих вход пользователей в систему;

dbus-monitor

dbus-send

dbus-uuidgen

libdbus-1.

{so,a}

-используется для мониторинга сообщений, поступающих через шину сообщений D-BUS;

-используется для отправки сообщения в шину сообщений D-BUS;

-используется для создания или чтения универсального уникального идентификатора;

-содержит функции API, используемые демоном сообщений D- BUS. D-BUS является первой библиотекой, в которой предложены средства обмена сообщениями вида 1:1 между двумя любыми приложениями; dbus-daemon является приложением, использую-

щим эту библиотеку для реализации демона шины сообщений;

qdbus

- коммуникационный интерфейс для основанных на Qt API прило-

 

жениях.

В общем случае, для работы с D-Bus необходимо хорошо знать приложение, с которым осуществляется взаимодействие, или написать такое приложение самому.

Для практических целей, очень удобна утилита qdbus, например, запущенная без параметров, она выведет все доступные имена D-Bus, как показано на рисунке 6.8.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]