linweiyoh 发表于 2021-7-30 10:46:58

请教如何在linux环境下,在QT中判断U盘的热拔插

qt版本5.12.

希望实现Linux下的U盘的检测,方便后续的文件拷贝,应该还需要附带卸载u盘.


请教各位大佬如何实现,查找方向,文章,示例都可以.
因为刚开始学linux,希望能够详细点.

搜索了多个地方的帖子,虽然找到些文章,但多个无法正常使用,或者无法理解.只好专门开问题求教.



linweiyoh 发表于 2021-8-2 15:58:28

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]
查看完整版本: 请教如何在linux环境下,在QT中判断U盘的热拔插