系统怎么才知道U盘(或者一些外部设备)已经插入或者拔出?

来源:百度知道 编辑:UC知道 时间:2024/05/27 13:25:12
系统是通过什么机制 发现插入 或者拔出 U盘

找了很久没有找到相关信息 希望高手赐教..越详细越好 。

小弟不才 分数最高我只能孝敬给你们250分 ...........

获得U盘的插入或者拔取得信息的传统方法是在内核级运行hotplug程序,相关参数通过环境变量传递过来,再由hotplug通知其他关注hotplug的应用程序。这样的做法效率有些低,现在通过一种特殊类型的socket netlink实现获取U盘拔插的信息。netlink专门用于内核空间和用户空间的异步通信。

下面的例子可以监听内核的hotplug事件,源代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <sys/un.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <linux/types.h>
#include <linux/netlink.h>
#include <errno.h>

#define UEVENT_BUFFER_SIZE 2048

static int init_hotplug_sock(void);

int main(int argc, char* argv[])
{
int hotplug_sock = init_hotplug_sock();
while(1){
char buf[UEVENT_BUFFER_SIZE*2] = {0};
recv(hotplug_sock, &buf, sizeof(buf), 0);
printf("%s\n", buf);

}
return 0;
}

static int init_hotplug_sock(void)
{
struct sockaddr_nl snl;
const int buffe