系统怎么才知道U盘(或者一些外部设备)已经插入或者拔出?
来源:百度知道 编辑:UC知道 时间:2024/05/27 13:25:12
找了很久没有找到相关信息 希望高手赐教..越详细越好 。
小弟不才 分数最高我只能孝敬给你们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