源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Linux系统环境下如何获得U盘拔插的信息

  • 时间:2022-03-21 14:52 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Linux系统环境下如何获得U盘拔插的信息
下面的例子可以监听内核的hotplug事件,源代码如下:  
[u]复制代码[/u] 代码如下:
#include <stdio.h>  #include <stdlib.h>  #include <string.h>  #include <ctype.h>  #include <sys/un.h>  #include <sys/ioctl.h>  #include <sys/socket.h>  #include <linux/types.h>  #include <linux/netlink.h>  #include <errno.h>  #define UEVENT_BUFFER_SIZE 2048  static int init_hotplug_sock(void);  int main(int argc, char* argv[])  {  int hotplug_sock = init_hotplug_sock();  while(1){  char buf[UEVENT_BUFFER_SIZE*2] = {0};  recv(hotplug_sock, &buf, sizeof(buf), 0);   printf("%sn", buf);  }  return 0;  }  static int init_hotplug_sock(void)  {  struct sockaddr_nl snl;  const int buffersize = 16 * 1024 * 1024;  int retval;  memset(&snl, 0x00, sizeof(struct sockaddr_nl));  snl.nl_family = AF_NETLINK;  snl.nl_pid = getpid();  snl.nl_groups = 1;  int hotplug_sock = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT);  if (hotplug_sock == -1) {  printf("error getting socket: %s", strerror(errno));  return -1;  }  /* set receive buffersize */  setsockopt(hotplug_sock, SOL_SOCKET, SO_RCVBUFFORCE, &buffersize, sizeof(buffersize));  retval = bind(hotplug_sock, (struct sockaddr *) &snl, sizeof(struct sockaddr_nl));  if (retval < 0) {  printf("bind failed: %s", strerror(errno));  close(hotplug_sock);  hotplug_sock = -1;  return -1;  }  return hotplug_sock;  } 
 
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部