使用udev sysname测试设备

时间:2015-09-07 19:04:01

标签: c udev

我正在Ubuntu编写我的第一个C程序,它涉及检测笔记本电脑上的AC适配器或电池何时看到事件(通过udev_monitor)。到目前为止,当电源情况发生变化时,我可以使用类似while片段的内容登录到控制台:

while (1) {
    dev = udev_monitor_receive_device(mon);
    if (dev) {
        printf("\n[INFO] Got Device\n");
        printf(" [INFO] Device Name: %s\n", udev_device_get_sysname(dev));
...

那太棒了!当我插上或拔下笔记本电脑时,我会将其记录到控制台。但是,我没有理解的是如何使用这些相同的功能进行有条件的测试。

例如,事实并非如此:

if (udev_device_get_sysname(dev) == "ADP1") { ... }

我不确定如何正确测试这个。显然,当使用printf()%s时,它会打印为字符串(字符数组?)。

编辑:从调用的函数记录到consle的值是适配器的ADP1和电池的BAT0 - 这与它们在/ sys / class /目录中的条目相关。

1 个答案:

答案 0 :(得分:1)

在C语言中,您可以使用其中一个字符串比较例程来比较字符串,例如strcmpstrncmp。如果你使用==比较它们,你只是比较指针的值,它们将不相同。

因此,检查sysname的代码是不正确的,因为指针比较永远不会成立。它应该改为:

if (strcmp(udev_device_get_sysname(dev), "ADP1") == 0) { … }

导致它比较字符串,而不是指针值。