udev 事件處理

2021-05-10 13:31:03 字數 2518 閱讀 7075

處理 hotplug 傳統的方法是,在核心中執行乙個稱為 hotplug 的程式,相關引數通過環境變數傳遞過來,再由 hotplug 通知其它關注 hotplug 事件的應用程式。這樣做不但效率低下,而且感覺也不那麼優雅。新的方法是採用 netlink 實現的,這是一種特殊型別的 socket ,專門用於核心空間與使用者空間的非同步通訊。下面的這個簡單的例子,可以監聽來自核心 hotplug 的事件。

#include < stdio .h>

#include

#include < string .h>

#include < ctype .h>

#include

#include

#include

#include

#include

#include < errno .h>

static int init_hotplug_sock ( void )

struct sockaddr_nl snl ;

const int buffersize = 16 * 1024 * 1024;

int retval ;

memset (& snl , 0x00, sizeof ( struct sockaddr_nl));

snl .nl_family = af_netlink;

snl .nl_pid = getpid ();

snl .nl_groups = 1;

int hotplug_sock = socket (pf_netlink, sock_dgram , netlink_kobject_uevent);

if ( hotplug_sock == -1) ;

recv ( hotplug_sock , & buf , sizeof ( buf ), 0); 

printf ( "%s/n" , buf );

return 0;

編譯:gcc -g hotplug.c -o hotplug_monitor

執行後插 / 拔 u 盤,可以看到:

add@/devices/pci0000:00/0000:00:1d.1/usb2/2-1

add@/devices/pci0000:00/0000:00:1d.1/usb2/2-1/usbdev2.2_ep00

add@/devices/pci0000:00/0000:00:1d.1/usb2/2-1/2-1:1.0

add@/class/scsi_host/host2

add@/devices/pci0000:00/0000:00:1d.1/usb2/2-1/2-1:1.0/usbdev2.2_ep81

add@/devices/pci0000:00/0000:00:1d.1/usb2/2-1/2-1:1.0/usbdev2.2_ep02

add@/devices/pci0000:00/0000:00:1d.1/usb2/2-1/2-1:1.0/usbdev2.2_ep83

add@/class/usb_device/usbdev2.2

add@/devices/pci0000:00/0000:00:1d.1/usb2/2-1/2-1:1.0/host2/target2:0:0/2:0:0:0

add@/class/scsi_disk/2:0:0:0

add@/block/sda

add@/block/sda/sda1

add@/class/scsi_device/2:0:0:0

add@/class/scsi_generic/sg0

remove@/devices/pci0000:00/0000:00:1d.1/usb2/2-1/2-1:1.0/usbdev2.2_ep81

remove@/devices/pci0000:00/0000:00:1d.1/usb2/2-1/2-1:1.0/usbdev2.2_ep02

remove@/devices/pci0000:00/0000:00:1d.1/usb2/2-1/2-1:1.0/usbdev2.2_ep83

remove@/class/scsi_generic/sg0

remove@/class/scsi_device/2:0:0:0

remove@/class/scsi_disk/2:0:0:0

remove@/block/sda/sda1

remove@/block/sda

remove@/devices/pci0000:00/0000:00:1d.1/usb2/2-1/2-1:1.0/host2/target2:0:0/2:0:0:0

remove@/class/scsi_host/host2

remove@/devices/pci0000:00/0000:00:1d.1/usb2/2-1/2-1:1.0

remove@/class/usb_device/usbdev2.2

remove@/devices/pci0000:00/0000:00:1d.1/usb2/2-1/usbdev2.2_ep00

remove@/devices/pci0000:00/0000:00:1d.1/usb2/2-1 

python事件處理 Python事件處理程式

我正在嘗試實現乙個排序的事件處理程式。我嘗試使用popen使用外部程序收集示例網路捕獲,並編寫乙個xml檔案。我解析xml檔案來收集我需要的資訊。但是我不想終止這個過程,直到資料報的數量達到一定限度。def getpacketcount xmlfile,count,pid while 1 try p...

事件處理 on 繫結事件

on 方法在匹配元素上繫結乙個或者多個事件處理函式 element.on events,selector fn 發生多個事件的話 div on click function mouseout function 發生事件發生同樣的操作的話 div on mouseover mouseout funct...

udev實現原理

udev實現原理 作者 李先靜 相對於linux來說,udev還是乙個新事物。然而,儘管它03年才出現,儘管它很低調 j 但它無疑已經成為linux下不可或缺的元件了。udev是什麼?它是如何實現的?最近研究linux裝置管理時,花了一些時間去研究udev的實現。udev是什麼?u 是指user s...