|
- 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[UEVENT_BUFFER_SIZE] = { 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提示线程正常运行,但实际试了下没任何反应.
请问有没哪位大佬能给出可能出问题的方向? |
|