處理 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...