首页 > 技术知识 > 正文

【海思应用篇】-(1)netlink

netlink套接字是用以实现用户进程与内核进程通信的一种特殊的进程间通信(IPC) ,也是网络应用程序与内核通信的最常用的接口。

这篇文章主要讲它的应用,用来检测磁盘的插入和拔出,以便于管理磁盘挂载和卸载,对于录像管理也非常重要。

直接上代码。

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

int main(void)

{

int sock;

struct sockaddr_nl addr;

int rc;

sock = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT);//NETLINK_ROUTE

if ( sock < 0 )

{

printf(“err while create netlink socket\n”);

return -1;

}

//setsockopt(sock, SOL_SOCKET, SO_RCVBUFFORCE, &sz, sizeof(sz));

memset(&addr, 0, sizeof(addr));

addr.nl_family = AF_NETLINK;

addr.nl_pid = getpid();

addr.nl_groups = 0xffffffff;

rc = bind(sock, (struct sockaddr *)&addr, sizeof(addr));

if ( rc < 0 )

{

printf(“err while bind netlink socket\n”);

close(sock);

return -1;

}

//return sock;

#if 1

char bufptr[4096];

while ( 1 )

{

memset(bufptr, 0, sizeof(bufptr));

rc = recv(sock, bufptr, sizeof(bufptr)-1, 0);

if ( rc <= 0 )

{

usleep(1000);

continue;

}

bufptr[rc] = \0;

//printf(“netlink read(%d)=%s\n”, rc, bufptr);

if ( strstr(bufptr, “block”) != NULL )

{

printf(“netlink read(%d)=%s\n”, rc, bufptr);

//可以用来处理磁盘的挂载和卸载操作

}

}

close(sock);

#endif

return -1;

}
<

猜你喜欢