나는 이벤트를 무한정 기다리는 프로그램을 작성하고 싶습니다. 이 경우에는 USB를 연결하고 후속 작업을 수행합니다.
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; }