首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >linux下网络管理器"org.freedesktop.NetworkManager.Device“界面生成的信号名称

linux下网络管理器"org.freedesktop.NetworkManager.Device“界面生成的信号名称
EN

Stack Overflow用户
提问于 2013-04-05 20:11:40
回答 1查看 1.2K关注 0票数 1

我是Dbus的新手,我正在尝试捕获插入或拔出网线时产生的信号。我正在尝试使用"http://software.intel.com/en-us/articles/detecting-network-connectivity-using-d-bus“中给出的示例代码。

我应该在dbus_message_is_signal()中使用什么信号名称来获取info.Provide,也可以使用任何示例代码来澄清我的概念。

我的代码是:

代码语言:javascript
复制
enter code here

#include<stdio.h>
#include<dbus/dbus.h>
#include <gdbus.h>

#include<stdbool.h>
#include<unistd.h>
#include<stdlib.h>
#include<dbus/dbus-glib-bindings.h>
#include <dbus/dbus-glib.h>
#include <dbus/dbus-glib-lowlevel.h>

#define PLATFORM_SERVICE          "org.freedesktop.NetworkManager"
#define PLATFORM_PATH                    "/org/freedesktop/NetworkManager"
#define PLATFORM_CONNECTION_IF    "org.freedesktop.NetworkManager"


main()
{

        DBusMessage* msg;
        DBusConnection* conn;
        DBusError err;

        printf("Listening for signals\n");

        // initialise the errors
        dbus_error_init(&err);

         //connect to the bus and check for errors

        conn = dbus_bus_get(DBUS_BUS_SYSTEM, &err);

        if (dbus_error_is_set(&err))
                {
                fprintf(stderr, "Connection Error (%s)n", err.message);
                dbus_error_free(&err);
                }

        if (NULL == conn)
                {
                printf("Error in connection\n");
                exit(1);
                }
 dbus_bus_add_match(conn, "type='signal',interface='org.freedesktop.NetworkManager'", &err);
        dbus_connection_flush(conn);

        if (dbus_error_is_set(&err))
        {
               fprintf(stderr, "Match Error (%s)n", err.message);
               exit(1);
        }

        printf("Match rule sent\n");


         g_message("Listening to D-BUS signals using a connection filter");

 // loop listening for signals being emmitted
        while (true)
        {
                printf("in while \n");
               // non blocking read of the next available message
              dbus_connection_read_write(conn,0);
               msg = dbus_connection_pop_message(conn);

              // loop again if we haven't read a message
               if (NULL == msg)
               {
                      sleep(1);
                      continue;
               }

                if (dbus_message_is_signal(msg, PLATFORM_CONNECTION_IF,"PropertiesChanged"))
                      printf("Received signal propertyChanged \n");
 if (dbus_message_is_signal(msg, PLATFORM_CONNECTION_IF, "DeviceRemoved"))
                      printf("Received signal %s\n", "Device changed");

  // free the message
               dbus_message_unref(msg);
        }
}

我可以获得属性改变的信号,但如何获得其他信号。

EN

回答 1

Stack Overflow用户

发布于 2013-04-05 20:25:12

看看http://projects.gnome.org/NetworkManager/developers/api/09/spec.html上的NetworkManager规范--它为您提供了接口的所有细节。

你可能感兴趣的信号是"DeviceAdded“和"DeviceRemoved”,用来发现设备的来去(插入和拔出电缆)。您还可以深入到状态来获取"PropertiesChanged“信号并获取”org.freedesktop.NetworkManager.Device“属性等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15833637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档