C 使用udev sysname测试设备

C 使用udev sysname测试设备,c,udev,C,Udev,我正在Ubuntu中编写我的第一个C程序,它涉及检测我笔记本电脑上的交流适配器或电池何时看到事件(通过udev\u监视器)。到目前为止,当电源状况发生变化时,我可以使用类似以下内容登录控制台 while (1) { dev = udev_monitor_receive_device(mon); if (dev) { printf("\n[INFO] Got Device\n"); printf(" [INFO] Device Name: %s\n"

我正在Ubuntu中编写我的第一个C程序,它涉及检测我笔记本电脑上的交流适配器或电池何时看到事件(通过
udev\u监视器
)。到目前为止,当电源状况发生变化时,我可以使用类似以下内容登录控制台

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/directory中的条目相关。

在C中,您可以使用字符串比较例程之一(例如或)来比较字符串。如果使用
==
对它们进行比较,则只会比较指针的值,而指针的值不会相同

因此,对于代码检查,sysname是不正确的,因为指针比较永远不会为真。应将其更改为以下内容:

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

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

使用
strcmp
在cin
C
中比较字符串比较使用
strcmp
/
strncmp
,否则你会比较指针值,这不会是相同的。真的那么简单吗?我真的不习惯C语言中的字符串是如何工作的。我会尝试一下-谢谢!顺便说一句,
udev\u monitor\u receive\u设备是否会阻塞线程?我相信不是,所以你在忙着等待,减少你的CPU周期和时间power@user996142是的,有一个非阻塞解决方案,但我想在实施另一个优化之前完全理解我的程序。谢谢!指针对我来说是一个全新的世界;答案看似简单。我的自定义屏幕调光应用程序现在工作得很好!