DBUS 例子

#include <stdio.h>
#include <stdlib.h>
#include <dbus/dbus-glib.h>

int main( int argc , char ** argv)
{
GError * error;
DBusGConnection * connection;
DBusGProxy * proxy;
char * string;

/* GType初始化 */
g_type_init();
error = NULL;

/* dbus_g_bus_get用来建立连接,这里和session bus连接,
也可以通过DBUS_BUS_SYSTEM与系统总线连接*/
connection = dbus_g_bus_get (DBUS_BUS_SESSION, & error);
if(connection == NULL){
g_printerr ("Failed to open connection to bus : %s/n",error->message);
g_error_free( error);
exit( 1 );
}

/* Create a proxy object用来代表远端,org.freedesktop.Notifications是系统自带的,
可以使用DBUS_INTERFACE_INTROSPECTABLE等定义来标识它*/
proxy = dbus_g_proxy_new_for_name (connection,
"org.freedesktop.Notifications" /* service */ ,
"/" /* path */ ,
"org.freedesktop.DBus.Introspectable"
/* interface,可以使用宏定义DBUS_INTERFACE_INTROSPECTABLE */ );

error = NULL;

/* 采用同步方式,第二个参数是method,第三个参数是error,后面是不定长的参数,显示输入,后为输出,
以G_TYPE_INVALID标识接收,每个参数由GType类型和存贮参数值的地址构成。在这个例子中,输入没有参数,
输入有一个参数,是string*/
if( !dbus_g_proxy_call (proxy,"Introspect", &error, G_TYPE_INVALID,
G_TYPE_STRING, &string, G_TYPE_INVALID) )
{
if(error->domain == DBUS_GERROR && error->code == DBUS_GERROR_REMOTE_EXCEPTION)
g_printerr("Caught remote method exception %s:%s",
dbus_g_error_get_name(error),error->message);
else
g_printerr("Error : %s/n", error->message);
g_error_free(error);
exit (1);
}

g_print("Message Method return from bus:/n%s/n",string);

g_free(string);
g_object_unref(proxy);
return 0;
}

 

 

 

 

 

----------------------------------------------------------------------------------------------------

执行命令:

 

gcc -g `pkg-config --cflags --libs glib-2.0 gthread-2.0` `pkg-config --cflags --libs dbus-1` `pkg-config --cflags --libs dbus-glib-1` demo_01.c -o demo_01

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值