从https://launchpad.net/ubuntu/+source/dbus/1.10.6-1ubuntu2下载需要的dbus包,然后解压,./configure make && make install

client.c

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <dbus/dbus.h>
  4. #include <unistd.h>
  5. const int RES_SUCCESS = -1;
  6. const int RES_FAILED  = 0;
  7. int my_dbus_initialization(char const * _bus_name, DBusConnection ** _conn) {
  8. DBusError err;
  9. int ret;
  10. dbus_error_init(&err);
  11. *_conn = dbus_bus_get(DBUS_BUS_SESSION, &err);
  12. if(dbus_error_is_set(&err)) {
  13. printf("Connection Error\n");
  14. dbus_error_free(&err);
  15. return RES_FAILED;
  16. }
  17. ret = dbus_bus_request_name(*_conn, _bus_name, DBUS_NAME_FLAG_REPLACE_EXISTING, &err);
  18. if(dbus_error_is_set(&err)){
  19. printf("Requece name error \n");
  20. dbus_error_free(&err);
  21. return RES_FAILED;
  22. }
  23. if(DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER != ret) {
  24. return RES_FAILED;
  25. }
  26. return RES_SUCCESS;
  27. }
  28. int my_dbus_send_sigal(DBusConnection * conn) {
  29. dbus_uint32_t serial = 0;
  30. DBusMessage* msg;
  31. DBusMessageIter args;
  32. char sigvalue[20] = "liyiwen";
  33. msg = dbus_message_new_signal("/test/signal/Object",  // object name
  34. "test.signal.Type",     // interface name
  35. "Test");                // name of signal
  36. if (NULL == msg) {
  37. printf("Message Null");
  38. return RES_FAILED;
  39. }
  40. dbus_message_iter_init_append(msg, &args);
  41. printf("%s\n", sigvalue);
  42. dbus_uint32_t my_age = 10;
  43. if(!dbus_message_iter_append_basic(&args, DBUS_TYPE_UINT32, &my_age)) {
  44. printf("Out of memory\n");
  45. return RES_FAILED;
  46. }
  47. if(!dbus_connection_send(conn, msg, &serial)) {
  48. printf("Out of memory");
  49. return RES_FAILED;
  50. }
  51. dbus_connection_flush(conn);
  52. dbus_message_unref(msg);
  53. return RES_SUCCESS;
  54. }
  55. int main(int agrc, char** argv)
  56. {
  57. DBusConnection * conn;
  58. printf("Start\n");
  59. if (RES_FAILED == my_dbus_initialization("test.method.client", &conn)) {
  60. exit(1);
  61. }
  62. my_dbus_send_sigal(conn);
  63. while(1){sleep(10);}
  64. return 0;
  65. }
  66. sercer.c
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <dbus/dbus.h>
    4. #include <unistd.h>
    5. const int RES_SUCCESS = -1;
    6. const int RES_FAILED  = 0;
    7. int my_dbus_initialization(char const * _bus_name, DBusConnection **_conn) {
    8. DBusError err;
    9. int ret;
    10. dbus_error_init(&err);
    11. *_conn = dbus_bus_get(DBUS_BUS_SESSION, &err);
    12. if(dbus_error_is_set(&err)) {
    13. printf("Connection Error(%s) \n", err.message);
    14. dbus_error_free(&err);
    15. return RES_FAILED;
    16. }
    17. ret = dbus_bus_request_name(*_conn, _bus_name, DBUS_NAME_FLAG_REPLACE_EXISTING, &err);
    18. if(dbus_error_is_set(&err)){
    19. printf("Requece name error(%s) \n", err.message);
    20. dbus_error_free(&err);
    21. return RES_FAILED;
    22. }
    23. if(DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER != ret) {
    24. return RES_FAILED;
    25. }
    26. return RES_SUCCESS;
    27. }
    28. int main(int agrc, char** argv)
    29. {
    30. DBusError err;
    31. DBusMessage* msg;
    32. DBusMessageIter args;
    33. dbus_error_init(&err);
    34. DBusConnection *conn;
    35. if (RES_FAILED == my_dbus_initialization("test.method.server", &conn)) {
    36. exit(1);
    37. }
    38. dbus_bus_add_match(conn, "type='signal', interface='test.signal.Type'", &err);
    39. dbus_connection_flush(conn);
    40. if(dbus_error_is_set(&err)) {
    41. printf("dbus_bus_add_match err (%s)", err.message);
    42. return RES_FAILED;
    43. }
    44. while(1) {
    45. dbus_connection_read_write(conn, 0);
    46. msg = dbus_connection_pop_message(conn);
    47. if(NULL == msg) {
    48. sleep(1);
    49. continue;
    50. }
    51. if(dbus_message_is_signal(msg, "test.signal.Type", "Test")) {
    52. if(!dbus_message_iter_init(msg, &args)) {
    53. printf("dbus_message_iter_init error, msg has no arguments!\n");
    54. }
    55. else if (DBUS_TYPE_UINT32 != dbus_message_iter_get_arg_type(&args)){
    56. printf("not a uint 32 type !\n");
    57. }
    58. else {
    59. dbus_uint32_t my_age = 0;
    60. dbus_message_iter_get_basic(&args, &my_age);
    61. printf("Got signal with value %d\n", my_age);
    62. }
    63. }
    64. dbus_message_unref(msg);
    65. }
    66. return 0;
    67. }
      1. http://dbus.freedesktop.org/doc/dbus-specification.html  这当然是最权威最重要的资料,但我觉得不是一个很好的入门资料。
      2. http://dbus.freedesktop.org/doc/dbus-tutorial.html 这里面有一些不错的例子,对Names 的解释也很好,但用的是 glib 的 binding,不能探究更底层的动作一度还是让我云里雾里。
      3. http://dbus.freedesktop.org/doc/api/html/group__DBusMessage.html  DBus 的 C 编程接口的在线文档,非常棒也非常有用
      4. http://dbus.freedesktop.org/doc/dbus/libdbus-tutorial.html 如何用 C API 层面的 DBus ,相见恨晚。

ubuntu 下dbus的环境搭建和使用的更多相关文章

  1. ubuntu下mysql的环境搭建及使用

    ubuntu下mysql的环境搭建及使用 环境安装 使用如下命令分别安装服务端程序,客户端程序,及客户端依赖库 sudo apt-get install mysql-server sudo apt-g ...

  2. ubuntu下python flask环境搭建

    ubuntu下python flask环境搭建 1. 安装pip sudo apt-get install python-dev pyhton-pip 2. 安装virtualenv sudo apt ...

  3. ubuntu下Nodic开发环境搭建

    ubuntu下Nodic开发环境搭建 1.编译环境 ubuntu可直接装gcc编译环境 sudo apt install gcc-arm-none-eabi 也可以下载可执行文件download 2. ...

  4. Ubuntu下Java开发环境搭建(eclipse)

    最近把工作环境转移到了Ubuntu Kylin下,发现在这下面Java环境还是很方便的.然而也经历了一些摸索的过程,故作文以记之. 一/开发前准备 安装系统/配置软件源,这部分内容没什么需要注意的.O ...

  5. [转]Ubuntu下ROS开发环境搭建(QT+ros_qtc_plugin)

    ROS与C++入门教程-搭建开发环境(QT+ros_qtc_plugin) PS : 在“安装ros_qtc_plugin插件”这一步中,原文提到“ Ubuntu 14.04使用apt-get方式安装 ...

  6. Ubuntu下python开发环境搭建

    配置语言 1) 依次点击设置--Region & Language--Manage Installed Languages --install/remove language--chinese ...

  7. windows调用ubuntu下的sublimeText2环境搭建

    部署需求: windows: windows 7 32 sp1 32位: linux :ubuntu 12.04 LTS 64位: 环境: windows安装:xmanager 4 linux安装:g ...

  8. ubuntu下node.js 环境搭建

    由于使用gulp.js来对前端项目进行管理,所以搭建了node.js的环境 首先, 需要安装node, npm 去官网下载安装包,解压后放到你的安装的目录.在这里我的是/opt/node-v6.11. ...

  9. Ubuntu下Android Studio环境搭建

    1.JDK安装 a.准备 由于AS(Android Studio)不支持openjdk,需要另行下载oracle jdk,同时官网指出对于64位linux系统,为了能在其上运行32位程序,需要安装一些 ...

随机推荐

  1. Input框去掉蓝色边框

    Input框去掉蓝色边框: <input type="text" name="" value="" class="Inpt& ...

  2. hdu 2473 并查集

    思路:每次合并时,都是给一个虚拟的根. #include<map> #include<Set> #include<cmath> #include<queue& ...

  3. 使用Xcode5开发时的icon取消高光效果

    .在General中App Icons 使用Source--> AppIcon .在Images.xcassets 中依次添加对应尺寸的icon. .选中AppIcon ,在右侧第三个按钮下,勾 ...

  4. 一步步搭建自己的轻量级MVCphp框架-(二)一个国产轻量级框架Amysql源码分析(1)

    这个框架是我一个做PHP的朋友“祥子”介绍给我的,Git地址https://coding.net/u/srar/p/AMP/git 下面从入口文件 总线程 ( index.php )开始进行分析 &l ...

  5. css中常用的几种居中方法

    在前端面试中,大都会问你div居中的方法: 文笔不好,就随便寥寥几句话概括了, 不过以后文笔肯定会变得更好一些的. 今天我们就细数一下几种方法: 1,使用position:absolute,设置lef ...

  6. 使用OLEDB读取excel和csv文件

    这是我第一次在博客上写东西,简单的为大家分享一个oledb读取文件的功能吧,这两天在做一个文件导入数据库的小demo,就想着导入前先在页面上展示一下,之前调用Microsoft.Office.Inte ...

  7. Part 82 to 85 Talking about Generic queue, stack collection class

    Part 82   Generic queue collection class Part 83   Generic stack collection class Part 84   Real tim ...

  8. table-layout:fixed 属性的解说

    table-layout:fixed 属性的解说如果想要一个table固定大小,里面的文字强制换行(尤其是在一长串英文文本,并且中间无空格分隔的情况下),以达到使过长的文字不撑破表格的目的,一般是使用 ...

  9. JavaScript之延迟加载

    本文参阅http://www.appelsiini.net/projects/lazyload Javascript Lazyload延迟加载特效,有效降低HTPP连接次数,提高首屏加载时间 1.增加 ...

  10. Cisco基本命令配置

    实验一 路由器的基本命令操作 1 实验目标 ü 熟悉路由器的命令行操作 ü 能够使用命令行帮助 ü 能够查看路由器接口信息 ü 能够产看路由器配置信息 ü 能够配置以太网接口 ü 能够配置广域网接口 ...