qt: usb热插拔(linux);

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define UEVENT_BUFFER_SIZE 2048
static int init_hotplug_sock()
{
  const int buffersize = 1024;
  int ret;
  struct sockaddr_nl snl;
  bzero(&snl, sizeof(struct sockaddr_nl));
  snl.nl_family = AF_NETLINK;
  snl.nl_pid = getpid();
  snl.nl_groups = 1;
  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));
  if (ret < 0)
  {
        perror("bind");
        close(s);
        return -1;
  }
  return s;
}
int main(int argc, char* argv[])
{
  int hotplug_sock = init_hotplug_sock();
  while(1)
  {
      /* Netlink message buffer */
      char buf[UEVENT_BUFFER_SIZE * 2] = {0};
      recv(hotplug_sock, &buf, sizeof(buf), 0);
      printf("%s\n", buf);
     /* USB 设备的插拔会出现字符信息,通过比较不同的信息确定特定设备的插拔,在这添加比较代码 */
  }
  return 0;

}

  

你可能感兴趣的:( qt: usb热插拔(linux);)