close

#include    
#include    
#include    
#include    
#include    
#include    
#include    
#include    
#include    
#include    
#include    
#include  
#include    
 
#define UEVENT_BUFFER_SIZE 2048    
 
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;    
}    
 
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("%s\n",buf);  
        }  
    return 0;  

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 多層分類 的頭像
    多層分類

    多層分類的部落格

    多層分類 發表在 痞客邦 留言(0) 人氣()