我希望编写一个无限期等待事件的程序,在本例中,是插入 USB/s 并执行一些后续操作。
我打算用 C 或 Python 编写。
问题是,当事件发生时(插入USB设备)如何通知程序?
其次,如果用Python完成,除了循环之外,是否还有资源消耗较小的等待事件的方式?
答案1
在 Linux 上,您可以,这要归功于udev
.
使用 识别您的 USB 设备
udevadm info -a /dev/yourdevice
。看编写 udev 规则。根据您的设备信息,创建 udev 规则:
SUBSYSTEM=="zzz", ATTRS{idVendor}=="xxx", ATTRS{idProduct}=="yyy", RUN+="/usr/bin/my_signaler /dev/%k
编写你的信号程序(在我的 udev 规则中,它位于
/usr/bin/my_sampler
):#! /bin/bash NEW_DEVICE="$1" TARGETS=$(pgrep program_name) for proc in $TARGETS do kill -s SIGUSR1 $proc done
让你的程序处理
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; }