版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1.D-Bus介绍1.1D-Bus是什么D-Bus是一种本地进程间通信的机制,支持点对点的通,以及广播/订阅式的通信方式.D-Bus将要传输的数据结构化为二进制数据,包括不同长度的整数,浮点数,字符串,复合类型等,D-Bus以消息为单位.而不是字节流.这是与tcp的差异.1.2D-Bus组成部分D-Bus有两个主要组成部:1.点对点通信的支持库2.Dbus服务进程(其作用类似于总线,也称之为总线,进程可以连接到这个总线,并在总线上传输消息,一个进程想要连接到总线,就需要支持库提供的接口)1.3总线地址及连接每条总线都有总线地址,进程可以这个地址连接到总线,总线地址类似于”/tmp/dbus_**”socket接口,但也有可能是TCP端口,对于应用开发者来说,都会说客户进程打开并连接到总线.每个连接到总线的连接,我们称之为对象,即每一个连接即一个对象.总线也是一个特殊的对象,总线对象本身提供了很多接口与方法.总线上每个连接都有名字,称为busname,(也可以不设置连接名,比如你不需要提供服务),连接名都是由'.'分开的字符串组,比如hello.world.test,这个名字称为公共名,对于每一个连接都有一个唯一连接名,用于标识每一个连接.类似于dhcp一样,域名与ip的对应关系,也是多对一的关系.1.4总线,对象(接口,方法or信号)关系如下一条总线可以连接多个对象一个对象可以有多个接口一个接口可以有多个方法.2.D-Bus支持库常用接口2.1dbus_bus_get()原型:DBusConnection*dbus_bus_get(DBusBusTypetype,DBusError*error)Param1:总线类型Param2:错误信息Return:DbusConnectionorNULLDesc:连接到busdaemon总线.2.2dbus_bus_request_name()原型:intdbus_bus_request_name(DBusConnection*connection,constchar*name,unsignedintflags,DBusError*error)Param1:connection连接描述符Param2:请求的busname,例如:hello.world.testParam3:flags(ALLOW_REPLACEMENT,REPLACE_EXISTING,DO_NOT_QUEUE)Param4:错误信息Return:-1是错误,(PRIMARY_OWNER,IN_QUEUE,EXISTS,ALREADY_OWNER)Desc:请求总线分配一个busname给这个连接2.3dbus_bus_add_match()原型:voiddbus_bus_add_match(DBusConnection*connection,constchar*rule,DBusError*error)Param1:connection连接描述符Param2:rule添加一些匹配规则,例如"type=signalortype=methodorinterface=hello.world.test"Param3:错误信息Desc:添加对connection的一些匹配规则2.4dbus_bus_remove_match()Add_match()的反操作原型:voiddbus_bus_remove_match(DBusConnection*connection,constchar*rule,DBusError*error);2.5dbus_connection_flush()原型:voiddbus_connection_flush(DBusConnection*connection)Param1:connection连接描述符Desc:阻塞,只能输出消息队列为空2.6dbus_connection_send()原型:dbus_bool_tdbus_connection_send(DBusConnection*connection,DBusMessage*message,dbus_uint32_t*serial)param1:connection连接描述符param2:填充的消息实体param3:发送消息的序列号,应该是为了多线程设计的2.7dbus_message_new_signal()原型:DBusMessage*dbus_message_new_signal(constchar*path,constchar*iface,constchar*name)param1:路径param2:接口param3:信号名desc:初始化一个signal实体对象
(这里说明一下总线转发步骤:对于signal来说,path->interface->signal,因为signal是广播的方式,所以不是必须指定busname.)2.8dbus_message_new_method_call()原型:DBusMessage*dbus_message_new_method_call(constchar*destination,constchar*path,constchar*iface,constchar*method)param1:目的busnameparam2:路径param3:接口param4:方法名desc:初始化一个method实体对象(这里说明一下总线转发步骤,对于method来说,bus_name->path->interface->signal,因为对于method的来说是点对点的消息传输,所以必须指定busname)2.9dbus_message_iter_init_append()原型:voiddbus_message_iter_init_append(DBusMessage*message, DBusMessageIter*iter)Param1:消息对象Param2:参数对象Desc:初始化一个参数对象,且把参数对象追加在message之后2.10dbus_message_iter_append_basic()原型:dbus_bool_tdbus_message_iter_append_basic(DBusMessageIter*iter,inttype,constvoid*value)param1:参数对象param2:参数类型(TYPE_STRING,TYPE_SIGNATURE,TYPE_BOOLEAN,TYPE,TYPE_INT32…)param3:参数数值desc:添加一个基础参数类型到参数对象中2.11dbus_connection_read_write()原型:dbus_bool_tdbus_connection_read_write(DBusConnection*connection, inttimeout_milliseconds)param1:connection描述符param2:超时时间return:TRUE连接状态,FALSE为断开状态desc:从总线中读消息,然后放入队列中2.12dbus_connection_pop_message()原型:DBusMessage*dbus_connection_pop_message(DBusConnection*connection)Param1:connection连接描述符Return:返回消息对象,NULL为无消息Desc:从队列中取出一条消息2.13dbus_message_is_signal()原型:dbus_bool_tdbus_message_is_signal(DBusMessage*message,constchar*iface,constchar*signal_name)param1:消息对象param2:接口名param3:信号名return:TRUE是指定的信号,FALSE相反desc:判断是否为指定接口的信号名.2.14dbus_message_is_method_call()原型:dbus_bool_tdbus_message_is_method_call(DBusMessage*message,constchar*iface,constchar*method)param1:消息对象param2:接口名param3:方法名return:TRUE是指定的方法,FALSE相反desc:判断是否为指定接口的方法名.2.15dbus_message_iter_init()原型:dbus_bool_tdbus_message_iter_init(DBusMessage*message, DBusMessageIter*iter)Param1:消息对象Param2:参数对象Return:FALSE是没有参数Desc:解析message参数到参数对象中2.16dbus_message_iter_next()原型:dbus_bool_tdbus_message_iter_next(DBusMessageIter*iter)Param1:参数对象Return:FALSE为没有下一个参数,TRUE已移动到下一个参数Desc:移动到下一个参数2.17dbus_message_iter_has_next()原型:dbus_bool_tdbus_message_iter_has_next(DBusMessageIter*iter)Param1:参数对象Return:TRUE为还有参数,FALSE为没有2.18dbus_message_iter_get_arg_type()原型:intdbus_message_iter_get_arg_type(DBusMessageIter*iter)Param1:参数对象Reuturn:参数类型Desc:获取参数类型2.19dbus_connection_send_with_reply()原型:dbus_bool_tdbus_connection_send_with_reply(DBusConnection*connection,DBusMessage*message,DBusPendingCall**pending_return,inttimeout_milliseconds)param1:connection连接描述符param2:消息对象param3:pending回调,用于接收返回值或错误消息param4:超时时间,-1为不限return:FALSE内存不足desc:入队消息,生成消息回调2.20dbus_pending_call_block()原型:voiddbus_pending_call_block(DBusPendingCall*pending)Param1:消息回调对象Desc:阻塞,直到收到返回消息,或者超时.2.21dbus_pending_call_steal_reply()原型:DBusMessage*dbus_pending_call_steal_reply(DBusPendingCall*pending)Param1:回调对象Return:消息对象Desc:获取一个消息对象,或者null附件:预备:installlibdbus-1-devlibdbus-glib-1-dev编译:gccclient.c–ldbus-1–I/usr/include/dbus-1.0–oclient gccservice.c–ldbus-1–I/usr/include/dbus-1.0–oservice可能的问题:
有可能会提示找不dbus-arch-deps.h头文件,在系统中搜一下,然后拷贝到/usr/include/dbus-1.0/dbus目录运行:./service& ./client3.D-BusDaemon启动3.1D-Busdaemon是什么Dbus-daemon是一个D-Bus消息总线daemon,它支持两个应用间一对一的通信.在系统启动之后.一般来讲,有两个dbusdaemon,一个为system,这是系统级权限,另一个session是用户级权限.3.2systembus和sessionbusSystem类型总线配置文件位置:/etc/dbus-1/system.conf,一般来讲,system类型总线通常被intscript启动,大部分功能用于广播事件,比如插拨设备Session类型总线配置文件位置:/etc/dbus-1/session.conf,一般来讲,一个login用户会拥有一个.也可能多个.SIGHUP信号导致dbus-daemon重新去加载配置3.3dbus-daemon执行参数dbus-daemon[--version][--session][--system][--config-file=FILE][--print-address[=DESCRIPTOR]][--print-pid[=DESCRIPTOR]][--fork][--nofork][--introspect][--address=ADDRESS][--systemd-activation][--nopidfile]--session
针对每个登录用户,普通用户(普通权限的dbusdaemon)--system
针对系统用户,超级权限(有特权的dbusdaemon)--config-file=FILE
指定dbusdaemon相关配置文件位置--fork
让dbusdaemon变为一个daemon--nofork
--fork的反操作--print-address[=DESCRIPTOR]
打印出dbusdaemon监听地址--print-pid[=DESCRIPTOR]
打印出dbusdaemonpid--introspect
打印出dbusdaemon内部实现的方法--address
设置监听
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 环保项目计划书
- 社工站某年工作计划
- 小学学校国防教育工作计划
- 2025村卫生室公共卫生工作计划例文投稿
- 有关我的寒假计划作文范文
- 新学期开学教师工作计划怎么写
- 2025年幼儿园资助计划-幼儿园贫困资助计划
- 《GEN系统工具》课件
- 《外存系统故障维修》课件
- 土地承包经营权解除合同案件判决书
- 【MOOC】油气地质与勘探-中国石油大学(华东) 中国大学慕课MOOC答案
- 山东省济南市2023-2024学年高一上学期1月期末考试 物理 含答案
- 管理咨询服务实施方案
- 成人重症患者人工气道湿化护理专家共识 解读
- 机器学习(山东联盟)智慧树知到期末考试答案章节答案2024年山东财经大学
- 科研设计及研究生论文撰写智慧树知到期末考试答案章节答案2024年浙江中医药大学
- 商业伦理与企业社会责任(山东财经大学)智慧树知到期末考试答案章节答案2024年山东财经大学
- 2024年江苏省普通高中学业水平测试小高考生物、地理、历史、政治试卷及答案(综合版)
- 《孟子》精读学习通章节答案期末考试题库2023年
- 济南人力资源和社会保障局劳动合同(共13页)
- 数值分析实验报告
评论
0/150
提交评论