请教如何在linux环境下,在QT中判断U盘的热拔插
qt版本5.12.希望实现Linux下的U盘的检测,方便后续的文件拷贝,应该还需要附带卸载u盘.
请教各位大佬如何实现,查找方向,文章,示例都可以.
因为刚开始学linux,希望能够详细点.
搜索了多个地方的帖子,虽然找到些文章,但多个无法正常使用,或者无法理解.只好专门开问题求教.
struct sockaddr_nl client;
struct timeval tv;
int CppLive, rcvlen, ret;
fd_set fds;
int buffersize = 1024;
CppLive = 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(CppLive, SOL_SOCKET, SO_RCVBUF, &buffersize, sizeof(buffersize));
bind(CppLive, (struct sockaddr*)&client, sizeof(client));
while (1) {
char buf = { 0 };
FD_ZERO(&fds);
FD_SET(CppLive, &fds);
tv.tv_sec = 0;
tv.tv_usec = 100 * 1000;
ret = select(CppLive + 1, &fds, NULL, NULL, &tv);
if(ret < 0)
continue;
if(!(ret > 0 && FD_ISSET(CppLive, &fds)))
continue;
/* receive data */
rcvlen = recv(CppLive, &buf, sizeof(buf), 0);
if (rcvlen > 0) {
emit EventMsg(buf);
/*You can do something here to make the program more perfect!!!*/
}
}
close(CppLive);
按照查到的其他帖子,再qt中写了一个线程moveToThread,运行上述程序,希望能再插入U盘时候能获得信号.
按照qDebug提示线程正常运行,但实际试了下没任何反应.
请问有没哪位大佬能给出可能出问题的方向?
页:
[1]