博文

目前显示的是标签为“hotplug”的博文

通过Netlink检测USB设备的插拔

    在Android的Vold里面可以了解到,其检测USB的插拔是通过Netlink机制来实现的,那我们也来尝试下如何在Linux下写个程序检测USB设备的插拔,下面我们将使用Netlink的NETLINK_KOBJECT_UEVENT类型套接字与Kernel进行通信,然后使用setsocketopt()来利用该套接字,再使用select()并发检测相应的套接写是否可操作,具体的代码实现 如下: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #include <sys/socket.h> #include <linux/netlink.h> #define UEVENT_BUFFER_SIZE 2048 int main(void) {     struct sockaddr_nl client;     struct timeval tv;     int fd, rcvlen, ret;     fd_set fds;     int buffersize = 1024;     fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_KOBJECT_UEVENT);     memset(&client, 0, sizeof(client));     client.nl_family = AF_NETLINK;     client.nl_pid = getpid();     client.nl_groups = 1; /* receive broadcast message*/     setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &buffe...