하드웨어 이벤트를 프로그램에 알리는 방법은 무엇입니까?

하드웨어 이벤트를 프로그램에 알리는 방법은 무엇입니까?

나는 이벤트를 무한정 기다리는 프로그램을 작성하고 싶습니다. 이 경우에는 USB를 연결하고 후속 작업을 수행합니다.

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;
    }
    

관련 정보