#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <linux/netlink.h>
static int
monitoring_usb_device( void )
{
int iResult = 0;
char
caKernelMsgBuff[1024];
const unsigned int
uiRecvBuffSize = sizeof( caKernelMsgBuff );
struct sockaddr_nl
snl;
int sfd = -1;
do
{
snl.nl_family = AF_NETLINK;
snl.nl_pad = 0;
snl.nl_pid = getpid();
snl.nl_groups = 1;
sfd = socket( PF_NETLINK,
SOCK_DGRAM,
NETLINK_KOBJECT_UEVENT
);
if ( -1 == sfd )
{
iResult =
-1;
break;
}
setsockopt( sfd,
SOL_SOCKET,
SO_RCVBUF,
&uiRecvBuffSize,
sizeof( uiRecvBuffSize ) );
iResult = bind( sfd,
(struct
sockaddr*)&snl,
sizeof(
snl ) );
if ( -1 == iResult )
{
return
-2;
break;
}
while( 1 )
{
recv(
sfd,
&caKernelMsgBuff,
sizeof(
caKernelMsgBuff ),
0 );
printf(
"Kernel Message:\n%s\n", caKernelMsgBuff );
if( 0 ==
memcmp( caKernelMsgBuff,
"add@",
4 )
&&
NULL != strstr(
caKernelMsgBuff,
"usb" ) )
{
printf( "Add USB Device\n"
);
break;
}
if( 0 ==
memcmp( caKernelMsgBuff,
"remove@",
7 )
&&
NULL != strstr(
caKernelMsgBuff,
"usb" ) )
{
printf( "Remove USB Device\n"
);
break;
}
}
sleep(1);
}while( 0 );
if ( -1 != sfd )
{
close( sfd );
sfd = -1;
}
return iResult;
}
int main(int argc, char* argv[])
{
printf(
"monitoring_usb_device return %d\n",
monitoring_usb_device() );
return 0;
}
加载中,请稍候......