私はイベントを無限に待つプログラムを書くのが好きです。この場合は、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; }