fprintf

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-glib 安装环境搭建

北城余情 提交于 2019-12-06 08:12:50
首先安装dbus的各种库 具体步骤请在csdn上参考 别说郁闷 写的 dbus-glib 安装环境搭建 按照他写的步骤,全部做完后再编译可能会出现找不到mechine-id的错误具体解决方法如https://www.sothink.cn/archives/2015/12/d-bus-library-appears-to-be-incorrectly-set-up.html 再调整好所有的头文件位置后即可编译。 下面是简单的首发实例,这个实例server从client读取两个整数并将其和返回给client server: #include <stdbool.h> #include <stdlib.h> #include <dbus/dbus-glib.h> #include <stdio.h> #include <string.h> #include <time.h> #include <unistd.h> #include <dbus-1.0/dbus/dbus.h> #include <math.h> void reply_to_method_call(DBusMessage* msg, DBusConnection* conn) { DBusMessage* reply; DBusMessageIter rootIter; dbus_uint32_t serial = 0;

dbus发送与接收数据入门例子

二次信任 提交于 2019-12-06 08:09:23
1.dbus 通信发送数据的代码例子: ( 1 ) //dbus-send-hello.c /* cc $(pkg-config --cflags --libs dbus-glib-1) -o dbus-send-hello dbus-send-hello.c && ./dbus-send-hello */ int main (int argc, char *argv[]) { DBusError dberr; DBusConnection *dbconn; DBusMessage *dbmsg; char *text; dbus_error_init (&dberr); dbconn = dbus_bus_get (DBUS_BUS_SESSION, &dberr); // 代表连接到会话总线,如果需要连接到 // 系统总线,简单把 DBUS_BUS_SESSION 替换为 DBUS_BUS_SYSTEM 即可。但是有麻烦,因为 // 系统总线对可以连接到它的用户有限制。可能需要提供一个 .service 文件指明能连接到某一个指定服务器的权限 if (dbus_error_is_set (&dberr)) { fprintf (stderr, "getting session bus failed: %s\n", dberr.message); dbus_error_free

dbus的hello world

心已入冬 提交于 2019-12-06 08:06:29
来自: http://blog.csdn.net/chenyufei1013/article/details/6573411 dbus的是一个低延迟,低开销,高可用性的IPC机制。通过dbus的daemon,可以实现进程间通信和函数调用。Windows下,dbus的开发库可以去这里( http://code.google.com/p/dbus-windows-installer/downloads/list )下载,在VS设置头文件和lib库的路径即可。若是要编写其Hello World,自然包含客户端和服务端两部分。下面的Hello World代码包含了发送消息和函数调用两部分,分别描述之。 1) 信号 假设客户端发送消息,服务端接收。客户端发送消息的流程如下: 1.创建于dbus daemon的会话连接。 2.创建消息,若有消息参数,附加之(这个一般都有) 3.通过连接发送消息。 1: int main ( int argc, char *argv[]) 2: { 3: DBusError dberr; 4: DBusConnection *dbconn; 5: DBusMessage *dbmsg; 6: char *text; 7: 8: // 初始话错误信息的结构体 9: dbus_error_init (&dberr); 10: 11: // 创建会话连接 12:

Windows下,dbus的hello world

自作多情 提交于 2019-12-06 08:06:08
dbus的是一个低延迟,低开销,高可用性的IPC机制。通过dbus的daemon,可以实现进程间通信和函数调用。Windows下,dbus的开发库可以去这里( http://code.google.com/p/dbus-windows-installer/downloads/list )下载,在VS设置头文件和lib库的路径即可。若是要编写其Hello World,自然包含客户端和服务端两部分。下面的Hello World代码包含了发送消息和函数调用两部分,分别描述之。 1) 信号 假设客户端发送消息,服务端接收。客户端发送消息的流程如下: 1.创建于dbus daemon的会话连接。 2.创建消息,若有消息参数,附加之(这个一般都有) 3.通过连接发送消息。 1: int main ( int argc, char *argv[]) 2: { 3: DBusError dberr; 4: DBusConnection *dbconn; 5: DBusMessage *dbmsg; 6: char *text; 7: 8: // 初始话错误信息的结构体 9: dbus_error_init (&dberr); 10: 11: // 创建会话连接 12: dbconn = dbus_bus_get (DBUS_BUS_SESSION, &dberr); 13: if (dbus

一篇dbus移植的点点滴滴

你说的曾经没有我的故事 提交于 2019-12-06 07:51:56
3个月了,终于把这个问题搞定了,前后学习加动手可能花了1个半月在这个系统搭建上面。我怀着复杂的心情写这篇文章,对很多懂这方面的专家我无话可说,对自己我更不知道该爱还是该恨。 6月中的时候我来到新的公司,接到的第一个任务就是交叉编译dbus,并在目标机上跑起来。我工作快3年了,一直搞的嵌入式开发,说实话在FSK很失败,以前开发环境都是搭好了,我们只是做一些应用程序的开发而已,我自认为最有成就的就是写了LCD和LED驱动。新公司真的有很多牛人,软硬件都懂,自己开始有点自卑。对第一个任务我甚至不知道怎么搭建嵌入式交叉编译环境,指定一个交叉编译工具链都花了我半天的时间,更不要说交叉编译dbus这么复杂的东西了,依赖的库太多,遇到的编译错误也让我摸不着头脑。幸好,这些东西做过就会了,在师傅的带领下我花了10天的时间把dbus交叉编译搞定。编译过程如下: http://blog.chinaunix.net/u3/99283/showart.php?id=1971652 其中有一个隐患在里面。 好了,该运行测试程序,运行的时候发现一些错误一个个解决掉,发现通信有问题。(其实就是交叉编译里面的一个隐患造成的) http://blog.chinaunix.net/u3/99283/showart.php?id=1976658 接下来的1个月被师傅叫去接别的任务,说这个问题可以先缓一下以后解决

基于DBus的进程间通信

▼魔方 西西 提交于 2019-12-06 07:44:58
1.dbus概念 网上有一篇叫“D-Bus Tutorial”的文章,流传较广。 D-Bus是针对桌面环境优化的IPC(interprocess communication )机制,用于进程间的通信或进程与内核的通信。最基本的D-Bus协议是一对一的通信协议。但在很多情况下,通信的一方是消息总线。消息总线是一个特殊的应用,它同时与多个应用通信,并在应用之间传递消息。下面我们会在实例中观察消息总线的作用。消息总线的角色有点类似与X系统中的窗口管理器,窗口管理器既是X客户,又负责管理窗口。 支持dbus的系统都有两个标准的消息总线:系统总线和会话总线。系统总线用于系统与应用的通信。会话总线用于应用之间的通信。网上有一个叫d-feet的python程序,我们可以用它来观察系统中的dbus世界。 图1、由d-feet观察到的D-Bus世界 dbus还提供了两个命令行工具用于dbus测试,dbus-send和dbus-monitor,前一个命令用于测试信号的发送,后一个命令用于监控dbus的数据流。 2.dbus概念 有关dbus的基础知识不在本文的范围内,具体的参见dbus的文档。下面给出dbus常用的流程。 2.1建立服务的流程 dbus_bus_get(),建立一个dbus连接; dbus_bus_request_name(),为这个dbus连接(DbusConnection)起名

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

十年热恋 提交于 2019-12-06 07:32:48
原文地址:http://www.cnblogs.com/liyiwen/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 设计中充满的面向对象的思想,请注意。 一

和菜鸟一起学linux之DBUS基础学习记录

旧街凉风 提交于 2019-12-06 07:24:49
D-Bus三层架构 D-Bus是一个为应用程序间通信的消息总线系统, 用于进程之间的通信。它是个3层架构的IPC 系统,包括: 1、函数库libdbus ,用于两个应用程序互相联系和交互消息。 2、一个基于libdbus构造的消息总线守护进程,可同时与多个应用程序相连,并能把来自一个应用程序的消息路由到0或者多个其他程序。 3、基于特定应用程序框架的封装库或捆绑(wrapper libraries or bindings )。例如,libdbus-glib和libdbus-qt,还有绑定在其他语言,例如Python的。大多数开发者都是使用这些封装库的API,因为它们简化了D-Bus编程细节。libdbus被有意设计成为更高层次绑定的底层后端(low-levelbackend )。大部分libdbus的 API仅仅是为了用来实现绑定。 总线   在D-Bus中,“bus”是核心的概念,它是一个通道:不同的程序可以通过这个通道做些操作,比如方法调用、发送信号和监听特定的信号。在一台机器上总线守护有多个实例(instance)。这些总线之间都是相互独立的。 一个持久的系统总线(system bus): 它在引导时就会启动。这个总线由操作系统和后台进程使用,安全性非常好,以使得任意的应用程序不能欺骗系统事件。它是桌面会话和操作系统的通信,这里操作系统一般而言包括内核和系统守护进程

c语言之输入输出

橙三吉。 提交于 2019-12-06 06:53:05
一、scanf   int scanf ( const char * restrict format,...); scanf ( "%d %d" ,&a,&b); 函数返回值为int型。如果a和b都被成功读入,那么scanf的返回值就是2; 如果只有a被成功读入,返回值为1; 如果a和b都未被成功读入,返回值为0; 如果遇到错误或遇到end of file,返回值为EOF。end of file为Ctrl+z 或者Ctrl+d。 二、printf    函数声明 int printf(char *format..) 调用格式 printf("<格式化字符串>", <参量表>); 格式化字符串包含三种对象,分别为:   (1)字符串常量;   (2)格式控制字符串;   (3)转义字符。   字符串常量原样输出,在显示中起提示作用。输出表列中给出了各个输出项,要求格式控制字符串和各输出项在数量和类型上应该一一对应。其中格式控制字符串是以%开头的字符串,在%后面跟有各种格式控制符,以说明输出数据的类型、宽度、精度等。 格式控制字符串format format -- 是字符串,包含了要被写入到标准输出 stdout 的文本。它可以包含嵌入的 format 标签,format 标签可被随后的附加参数中指定的值替换,并按需求进行格式化。 printf的格式控制字符串format组成如下: %