如何向程序通知硬件事件?

如何向程序通知硬件事件?

我希望编写一个无限期等待事件的程序,在本例中,是插入 USB/s 并执行一些后续操作。

我打算用 C 或 Python 编写。

问题是,当事件发生时(插入USB设备)如何通知程序?

其次,如果用Python完成,除了循环之外,是否还有资源消耗较小的等待事件的方式?

答案1

在 Linux 上,您可以,这要归功于udev.

  1. 使用 识别您的 USB 设备udevadm info -a /dev/yourdevice。看编写 udev 规则

  2. 根据您的设备信息,创建 udev 规则:

    SUBSYSTEM=="zzz", ATTRS{idVendor}=="xxx", ATTRS{idProduct}=="yyy",  RUN+="/usr/bin/my_signaler /dev/%k
    
  3. 编写你的信号程序(在我的 udev 规则中,它位于/usr/bin/my_sampler):

    #! /bin/bash
    NEW_DEVICE="$1"
    TARGETS=$(pgrep program_name)
    for proc in $TARGETS
    do
        kill -s SIGUSR1 $proc
    done
    
  4. 让你的程序处理SIGUSR1

    #include <stdio.h>
    #include <signal.h> 
    #include <unistd.h>
    
    void wakeup(int sig) {
         printf("go check /dev" );
    }
    
    int main(void) {
        signal(SIGUSR1, wakeup);
    
        while (1) { 
            /* if the SIGUSR1 signal is received while sleep is waiting, sleep will return*/
            sleep(20);
        }
        return 0;
    }
    

相关内容