Linux下自动检测USB热插拔,linux下检测USB的热插拨_baiyang

使用netlink.方式检测,代码如下:

#include#include#include#include#include#include#include#include#include#include#include#include#include#define UEVENT_BUFFER_SIZE 2048 static int init_hotplug_sock() {   const int buffersize = 1024;   int ret;   struct sockaddr_nl snl;   bzero(&snl, sizeof(struct sockaddr_nl));   snl.nl_family = AF_NETLINK;   snl.nl_pid = getpid();   snl.nl_groups = 1;   int s = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT);   if (s == -1)   {         perror("socket");         return -1;   }   setsockopt(s, SOL_SOCKET, SO_RCVBUF, &buffersize, sizeof(buffersize));   ret = bind(s, (struct sockaddr *)&snl, sizeof(struct sockaddr_nl));   if (ret < 0)   {         perror("bind");         close(s);         return -1;   }   return s; } int main(int argc, char* argv[]) {   int hotplug_sock = init_hotplug_sock();   while(1)   {       /* Netlink message buffer */       char buf[UEVENT_BUFFER_SIZE * 2] = {0};       recv(hotplug_sock, &buf, sizeof(buf), 0);       printf("%s\n", buf);      /* USB 设备的插拔会出现字符信息,通过比较不同的信息确定特定设备的插拔,在这添加比较代码 */   }   return 0;

}

经过测试发现只能实现插与拔,但是无法具体到具体是什么设备。

语料库研究共篇doc影子教育现状与分析我是湖南二踢脚送你一发小火箭快来发射工程测量规范最新版本出版社的全国规划教材什么级别全国大中小学教材建设规划2019双鱼玉佩为什么恐怖英国女车手飙车死亡微信红包100个创意这个总结笑死我了rps永远的套路索隆头像霸气超清索隆头像可爱钢琴颤音符号钢琴震音怎么练原生鲜美的佤族美食反转母女长篇福利23男性尖锐湿疣早期症状图早期尖锐湿疣的症状男性尖锐湿疣症状证婚词经典美国中学入学考试菜狗吃播今天就简单点吃自己吧一款狗粮吃三年你就继续作吧