【海思应用篇】-(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;
}免责声明:文章内容来自互联网,本站不对其真实性负责,也不承担任何法律责任,如有侵权等情况,请与本站联系删除。
转载请注明出处:【海思应用篇】-(1)netlink https://www.yhzz.com.cn/a/14849.html