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

【海思应用篇】-(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

上一篇 2023-05-12 11:47:58
下一篇 2023-05-12 11:50:25

相关推荐

联系云恒

在线留言: 我要留言
客服热线:400-600-0310
工作时间:周一至周六,08:30-17:30,节假日休息。