dbus

D-Bus 体系

99封情书 提交于 2019-12-06 08:18:33
有很多种IPC或者网络通信系统,如:CORBA, DCE, DCOM, DCOP, XML-RPC, SOAP, MBUS, Internet Communications Engine (ICE)等等,可能会有数百种,dbus的目的主要是下面两点: 1.在同一个桌面会话中,进行桌面应用程序之间的通讯 2.桌面程序与内核或者守护进程的通信。 Dbus是一套进程通信体系,它有以下几层: 1.libdbus库,提供给各个应用程序调用,使应用程序具有通信和数据交换的能力,两个应用程序可以直接进行通信,就像是一条socket通道,两个程序之间建立通道之后,就可以通讯了。 2.消息守护进程,在libdbus的基础上创建,可以管理多个应用程序之间的通信。每个应用程序都和消息守护进程建立dbus的链接,然后由消息守护进程进行消息的分派。 3.各种包装库,有libdbus-glib,libdbus-qt等等,目的是将dbus的底层api进行一下封装。 下面有一张图可以很方便说明dbus的体系结构。 dbus中的消息由一个消息头(标识是哪一种消息)和消息数据组成,比socket的流式数据更方便一些。bus daemon 就像是一个路由器,与各个应用程序进行连接,分派这些消息。bus daemon 在一台机器上有多个实例,第一个实例是全局的实例,类似于sendmail和或者apache

DBus glib 实现和使用object

試著忘記壹切 提交于 2019-12-06 08:17:41
为了学习DBUS,写的练习程序。修改了gtk指南中tictactoe的代码, tictactoe上有三行三列9个按键,三个连成行列或斜线的按钮被按下后则reset。在其中加入DBUS server,使其他程序可以通过DBUS控制tictactoe中的按键。 实现一个 Object: tictactoe.c中包含了tictactoe类定义,ttt_test.c中则创建了一个实例。 实现一个描述 object 的XML文件,其中定义了interface和method, <?xml version="1.0" encoding="UTF-8" ?> <node name="/com/lp/tictactoe"> <interface name="com.lp.tictactoe"> <method name="keypad"> <arg type="u" name="x" direction="in" /> </method> </interface> </node> 并使用 dbus-binding-tool 产生头文件 dbus-binding-tool --mode=glib-server --prefix=tictactoe tictactoe.xml > tictactoe-glue2.h 调用 dbus_g_object_type_install_info 函数安装

DBus-glib环境的搭建

时光总嘲笑我的痴心妄想 提交于 2019-12-06 08:17:22
我的操作系统是Ubuntu 14.04 安装Dbus及其相关库: sudo apt-get install dbus sudo apt-get install d-feet sudo apt-get install libgtk2.0-dev sudo apt-get install libdbus-glib-1-dev 编译dbus代码时需要指定相关头文件及库文件,因此编写如下简单的Makefile: CC=gcc RM=rm -fr CFLAGS += `pkg-config --cflags dbus-glib-1 dbus-1 glib-2.0` LIBS += `pkg-config --libs dbus-glib-1 dbus-1 glib-2.0` APP=mybus SRC=$(APP).c OBJ=$(APP).o all: clean build build: $(CC) -c $(SRC) $(CFLAGS) $(CC) -o $(APP) $(OBJ) $(LIBS) $(RM) $(OBJ) clean: $(RM) $(APP) $(OBJ) 其中APP=mydbus可以修改为自己的.c文件名 对于DBus学习推荐下面的博客: http://blog.csdn.net/flowingflying/article/details/5410820 水平有限

DBus学习(4)---相关接口函数

江枫思渺然 提交于 2019-12-06 08:16:48
*引用本文请注明来自 blog.csdn.net/wtz1985 下面是常用的函数接口,使用了 glib 的数据类型和函数调用规范。可变参数一般是调用的方法的参数列表。 1. 获取一个连接( bus ). DBusGConnection* dbus_g_bus_get (DBusBusType type, Gerror **error); 2. 获取一个对象的代理 DBusGProxy* dbus_g_proxy_new_for_name (DBusGConnection *connection, const char *bus_name, const char *path_name, const char *interface_name); 3. 同步调用对象的方法并返回结果, 参数 error 后面是输入参数列表和输出参数列表。 gboolean dbus_g_proxy_call (DBusGProxy *proxy, const char *method, GError **error, GType first_arg_type, ...); 4. 异步调用对象的方法, 回调函数 notify 由用户提供。 DBusGProxyCall * dbus_g_proxy_begin_call (DBusGProxy *proxy, const char *method,

dbus-glib应用入门

家住魔仙堡 提交于 2019-12-06 08:16:16
操作系统:ubuntu16.04 需要安装的依赖包:sudo apt install libglib2.0-dev libdbus-glib-1-dev libdbus-1-dev 工作中有用到dbus-glib编程接口,官网文档已经不建议使用,但是还是简单小结一下,我是一个初级入门者,如果有问题还希望多多指教。 一、几个需要明确的概念: 1、Dbus概念 Dbus是一个进程间的通信机制,可以是应用与应用之间的通信,也可以是应用与系统之间的通信。 2、Dbus Daemon 在DBus的体系中,有一个常驻的进程 Daemon,所有进程间的交互都通过它来进行分发和管理。所有希望使用 DBus 进行通信的进程,都必须事先连上 Daemon,并将自己的名字注册到 Daemon 上,之后,Daemon会根据需要把消息以及数据发到相应的进程中。 3、通信机制 DBus 提供的最简单的一种通信方式是信号(Signal),应用程序可以发送一个信号到 Daemon 上,之后,Daemon 会根据信号的种类和谁希望得到信号等信息,把相应的数据发给每个希望得到信号的进程。 4、常用到各种名字 (1)DBUS name 在 DBus 中最为重要的名字是“Bus Name”,Bus Name 是一个每个应用程序(或是通信对象)用来标识自己用的。几乎可以当成是“IP”地址来理解。Bus Name有两种

dbus-glib 和 GDBus 的区别

天大地大妈咪最大 提交于 2019-12-06 08:15:54
http://people.freedesktop.org/~david/gio-gdbus-codegen-20110412/ch29.html Conceptual differences(概念上的区别) The central concepts of D-Bus are modelled in a very similar way in dbus-glib and GDBus. Both have a objects representing connections, proxies and method invocations. But there are some important differences: D-Bus最重要的概念在dbus-glib和GDBus中都是相似的.都用对象表示连接,代理 和 方法执行,但也有一些重要的不同点: dbus-glib uses the libdbus reference implementation , GDBus doesn't. Instead, it relies on GIO streams as transport layer, and has its own implementation for the the D-Bus connection setup and authentication. Apart from

DBus 入门与应用 -- DBus 的 C 编程接口

空扰寡人 提交于 2019-12-06 08:15:31
转载自:http://www.cnblogs.com/muxue/archive/2012/12/02/2798876.html 最近在学 Dbus,不过总是不得其门而入。 大部分资料都讲了很多东西却最终没有让我搞清楚怎么用 DBus,不就是一个 IPC 通信的工具么?就没有一点实用些的资料么?看了很多资料之后还是觉得只见树木不见森林。仔细整理下思路,觉得还是应该从最基本的方面入门,先从 DBus 的 C API 入手学习,有了这些知识,就算麻烦,也可以先在完成一个基本功能的例子程序的同时大概的知道 DBus 的运行机制。 在网上找到这么一篇文章: http://www.matthew.ath.cx/misc/dbus , 正合我意,下面的内容基本是对这篇文章的翻译和扩充。 注意: 翻译没有得到原文作者同意,原文也很简单易懂,最好去读原文。如果收到投诉,我会立即撤掉本文的。 本文不是一篇好的 DBus 入门,有很多基本的东西不在记述之内。 一般情况下不会直接使用 C API 进行 DBus 的编程,而是使用某种 DBus-binding,但我觉得理解 DBus 的 C API 对完整地理解 DBus 是非常重要的。 虽然 DBus 是用 C 写的,而且本文写的是 C API,但是 DBus 设计中充满的面向对象的思想,请注意。 一、共通部分的代码 在使用 DBus 进行通信的时候

Dbus的编译和安装

别来无恙 提交于 2019-12-06 08:15:16
下载地址为http://permalink.gmane.org/gmane.comp.freedesktop.dbus/15992 error: cannot run C compiled programs echo ac_cv_have_abstract_sockets=yes>arm-linux.cache ./configure --prefix=/wsh_space/my_install/usr/lib --host=arm --build=arm-linux CC="arm-cortex_a9-linux-gnueabi-gcc -L/wsh_space/my_install/usr/lib/lib -I/wsh_space/my_install/usr/lib/include" --cache-file=arm-linux.cache --with-x=no --libdir=/wsh_space/my_install/usr/lib/lib --includedir=/wsh_space/my_install/usr/lib/include ./configure --prefix=/wsh_space/my_install/usr/lib --host=arm --build=arm-linux CC="arm-cortex_a9-linux-gnueabi-gcc

D-BUS详细分析

别说谁变了你拦得住时间么 提交于 2019-12-06 08:14:58
一、概述 官方网站: http://www.freedesktop.org/wiki/Software/dbus ,但是如果要下windows版的代码最好不要从sourceforge下,多次下来的1.2.4版本都无法正常解压。可以从svn上拿,具体见后面的dbus编译部分。 从官方首页中可以看到这样一段描述D-BUS 的话:“D-Bus is a message bus system, a simple way for applications to talk to one another. In addition to interprocess communication, D-Bus helps coordinate process lifecycle; it makes it simple and reliable to code a "single instance" application or daemon, and to launch applications and daemons on demand when their services are needed. ” 因此,D-BUS从本质来说就是进程间通信(inter-process communication)(IPC)的一个实现。他最初产生于Linux平台,是做为freedesktop

dbus基本接口(转)

流过昼夜 提交于 2019-12-06 08:14:47
http://www.haohaoxuexi.com/Institute/Details.php?Id=9896 建立服务的流程: ---------------------------------- 建立一个dbus连接之后 -- dbus_bus_get(),为这个dbus连接(DbusConnection)起名 -- dbus_bus_request_name(),这个名字将会成为我们在后续进行远程调用的时候的服务名,然后我们进入监听循环 -- dbus_connection_read_write()。在循环中,我们从总线上取出消息 -- dbus_connection_pop_message(),并通过比对消息中的方法接口名和方法名 -- dbus_message_is_method_call(),如果一致,那么我们跳转到相应的处理中去。在相应的处理中,我们会从消息中取出远程调用的 参数。并且建立起回传结果的通路 -- reply_to_method_call()。回传动作本身等同于一次不需要等待结果的远程调用。 发送信号的流程: ---------------------------------- 建立一个dbus连接之后,为这个dbus连接起名,建立一个发送信号的通道,注意,在建立通道的函数中,需要我们填写该信号的接口名和信号名 -- dbus_message_new