Linux系统环境下如何获得U盘拔插的信息
Linux系统环境下如何获得U盘拔插的信息
发布时间:2016-12-26 来源:查字典编辑
摘要:下面的例子可以监听内核的hotplug事件,源代码如下:复制代码代码如下:#include#include#include#include#...

下面的例子可以监听内核的hotplug事件,源代码如下:

复制代码 代码如下:

#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>

#defineUEVENT_BUFFER_SIZE2048

staticintinit_hotplug_sock(void);

intmain(intargc,char*argv[])

{

inthotplug_sock=init_hotplug_sock();

while(1){

charbuf[UEVENT_BUFFER_SIZE*2]={0};

recv(hotplug_sock,&buf,sizeof(buf),0);

printf("%sn",buf);

}

return0;

}

staticintinit_hotplug_sock(void)

{

structsockaddr_nlsnl;

constintbuffersize=16*1024*1024;

intretval;

memset(&snl,0x00,sizeof(structsockaddr_nl));

snl.nl_family=AF_NETLINK;

snl.nl_pid=getpid();

snl.nl_groups=1;

inthotplug_sock=socket(PF_NETLINK,SOCK_DGRAM,NETLINK_KOBJECT_UEVENT);

if(hotplug_sock==-1){

printf("errorgettingsocket:%s",strerror(errno));

return-1;

}

/*setreceivebuffersize*/

setsockopt(hotplug_sock,SOL_SOCKET,SO_RCVBUFFORCE,&buffersize,sizeof(buffersize));

retval=bind(hotplug_sock,(structsockaddr*)&snl,sizeof(structsockaddr_nl));

if(retval<0){

printf("bindfailed:%s",strerror(errno));

close(hotplug_sock);

hotplug_sock=-1;

return-1;

}

returnhotplug_sock;

}

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新unix linux学习
热门unix linux学习
操作系统子分类