socket

 

#include <stdio.h> #include <unistd.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 NETLINK_KOBJECT_UEVENT 15 static int init_hotplug_sock ( void ) { struct sockaddr_nl snl ; const int buffersize = 16 * 1024 * 1024; int retval; memset(&snl , 0x00, sizeof(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_RCVBUF, & buffersize , sizeof (buffersize)); retval = bind ( hotplug_sock , ( struct sockaddr *) &snl , sizeof(sockaddr_nl)); if ( retval < 0) { printf ( "bind failed: %s" , strerror ( errno )); close ( hotplug_sock ); hotplug_sock = -1; return -1; } return hotplug_sock ; } #define UEVENT_BUFFER_SIZE 2048 int main ( int argc , char * argv []) { char buf [ UEVENT_BUFFER_SIZE *2] = {0}; char *pData = NULL; char *pHead = NULL; char *pType = NULL; char *pName = NULL; char *pTemp = NULL; int hotplug_sock = init_hotplug_sock (); while (1) { recv ( hotplug_sock , & buf , sizeof ( buf ), 0); pData = buf; pHead = strsep(&pData,"@"); pType = strsep(&pData,"/"); pType = strsep(&pData,"/"); while((pTemp = strsep(&pData, "/")) != NULL){ pName = pTemp; } printf ( "%s = %s :: %s/n" , pHead, pType, pName); } return 0; }

 

 

 

你可能感兴趣的:(struct,socket,null,buffer,include)