在u盘的热拔插监听部分,部分使用了前辈的代码https://github.com/wang-bin/qdevicewatcher。这一段时间对代码进行了细致的阅读并学习了netlink的部分机制,然后对项目相关部分进行了修改和去除冗余。
netlink用于内核与用户的通信,机制是socket。在u盘热拔插监听实现中,只需要实现用户部分的socket,然后建立与内核部分的绑定。
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));
然后通过recv()接受信息,通过对信息进行解析,判断状态。
u盘插入:
u盘拔出: