开源网站模板下载的网站模版怎么用
- 作者: 五速梦信息网
- 时间: 2026年03月21日 10:35
当前位置: 首页 > news >正文
开源网站模板,下载的网站模版怎么用,小程序定制开发合同,网站设计软件培训怎么样文章目录 前言一、Netlink 介绍二、示例代码参考资料 前言 一、Netlink 介绍 Netlink套接字是用以实现用户进程与内核进程通信的一种特殊的进程间通信(IPC) ,也是网络应用程序与内核通信的最常用的接口。 在Linux 内核中#xff0c;使用netlink 进行应用与内核通信的应用有… 文章目录 前言一、Netlink 介绍二、示例代码参考资料 前言 一、Netlink 介绍 Netlink套接字是用以实现用户进程与内核进程通信的一种特殊的进程间通信(IPC) ,也是网络应用程序与内核通信的最常用的接口。 在Linux 内核中使用netlink 进行应用与内核通信的应用有很多如 路由 daemonNETLINK_ROUTE用户态 socket 协议NETLINK_USERSOCK防火墙NETLINK_FIREWALLnetfilter 子系统NETLINK_NETFILTER内核事件向用户态通知NETLINK_KOBJECT_UEVENT通用netlinkNETLINK_GENERIC Netlink 是一种在内核与用户应用间进行双向数据传输的非常好的方式用户态应用使用标准的 socket API 就可以使用 netlink 提供的强大功能内核态需要使用专门的内核 API 来使用 netlink。 一般来说用户空间和内核空间的通信方式有三种/proc、ioctl、Netlink。而前两种都是单向的而Netlink可以实现双工通信。 Netlink 相对于系统调用ioctl 以及 /proc文件系统而言具有以下优点 netlink使用简单只需要在include/linux/netlink.h中增加一个新类型的 netlink 协议定义即可,(如 #define NETLINK_TEST 20 然后内核和用户态应用就可以立即通过 socket API 使用该 netlink 协议类型进行数据交换)netlink是一种异步通信机制在内核与用户态应用之间传递的消息保存在socket缓存队列中发送消息只是把消息保存在接收者的socket的接收队列而不需要等待接收者收到消息使用 netlink 的内核部分可以采用模块的方式实现使用 netlink 的应用部分和内核部分没有编译时依赖netlink 支持多播内核模块或应用可以把消息多播给一个netlink组属于该neilink 组的任何内核模块或应用都能接收到该消息内核事件向用户态的通知机制就使用了这一特性内核可以使用 netlink 首先发起会话 Netlink协议基于BSD socket和AF_NETLINK地址簇使用32位的端口号寻址每个Netlink协议通常与一个或一组内核服务/组件相关联如NETLINK_ROUTE用于获取和设置路由与链路信息、NETLINK_KOBJECT_UEVENT用于内核向用户空间的udev进程发送通知等。 二、示例代码 netlink_test.c #include linux/init.h #include linux/module.h #include linux/types.h #include net/sock.h #include linux/netlink.h#define NETLINK_TEST 25 #define MSG_LEN 125 #define USER_PORT 100MODULE_LICENSE(GPL); MODULE_AUTHOR(zhangwj); MODULE_DESCRIPTION(netlink example);struct sock nlsk NULL; extern struct net init_net;/ 向用户空间发送消息的接口 */ int send_usrmsg(char *pbuf, uint16_t len) {struct sk_buff *nl_skb;struct nlmsghdr nlh; // 消息头int ret;/ 创建sk_buff 空间 /nl_skb nlmsg_new(len, GFP_ATOMIC);if(!nl_skb){printk(netlink alloc failure\n);return -1;}/ 设置netlink消息头部 /nlh nlmsg_put(nl_skb, 0, 0, NETLINK_TEST, len, 0);if(nlh NULL){printk(nlmsg_put failaure \n);nlmsg_free(nl_skb);return -1;}/ 拷贝数据发送 /memcpy(nlmsg_data(nlh), pbuf, len);ret netlink_unicast(nlsk, nl_skb, USER_PORT, MSG_DONTWAIT); / 发送单播消息 */return ret; }static void netlink_rcv_msg(struct sk_buff *skb) {struct nlmsghdr *nlh NULL;char *umsg NULL;char kmsg hello users!!!;if(skb-len nlmsg_total_size(0)){nlh nlmsg_hdr(skb);umsg NLMSG_DATA(nlh);/ 宏NLMSG_DATA(nlh)用于取得消息的数据部分的首地址设置和读取消息数据部分时需要使用该宏 /if(umsg){printk(kernel recv from user: %s\n, umsg);send_usrmsg(kmsg, strlen(kmsg));}} }struct netlink_kernel_cfg cfg { .input netlink_rcv_msg, / set recv callback / }; int test_netlink_init(void) {/ create netlink socket */nlsk (struct sock )netlink_kernel_create(init_net, NETLINK_TEST, cfg);if(nlsk NULL){ printk(netlink_kernel_create error !\n);return -1; } printk(test_netlink_init\n);return 0; }void test_netlink_exit(void) {if (nlsk){netlink_kernel_release(nlsk); / release ..*/nlsk NULL;} printk(test_netlink_exit!\n); }module_init(test_netlink_init); module_exit(test_netlink_exit);Makefile # #Desgin of Netlink #MODULE_NAME :netlink_test obj-m :\((MODULE_NAME).oKERNELDIR ? /lib/modules/\)(shell uname -r)/build PWD : \((shell pwd)all:\)(MAKE) -C \((KERNELDIR) M\)(PWD)clean:\((MAKE) -C \)(KERNELDIR) M$(PWD) cleansender.c #include stdio.h #include stdlib.h #include sys/socket.h #include string.h #include linux/netlink.h #include stdint.h #include unistd.h #include errno.h#define NETLINK_TEST 25 #define MSG_LEN 125 #define MAX_PLOAD 125typedef struct _user_msg_info {struct nlmsghdr hdr;char msg[MSG_LEN]; } user_msg_info;int main(int argc, char **argv) {int skfd;int ret;user_msg_info u_info;socklen_t len;struct nlmsghdr *nlh NULL;struct sockaddr_nl saddr, daddr;char umsg hello netlink!!;/ 创建NETLINK socket /skfd socket(AF_NETLINK, SOCK_RAW, NETLINK_TEST);if(skfd -1){perror(create socket error\n);return -1;}memset(saddr, 0, sizeof(saddr));saddr.nl_family AF_NETLINK; //AF_NETLINKsaddr.nl_pid 100; //端口号(port ID) saddr.nl_groups 0;/ 将套接字和Netlink地址结构体进行绑定 */if(bind(skfd, (struct sockaddr )saddr, sizeof(saddr)) ! 0){perror(bind() error\n);close(skfd);return -1;}memset(daddr, 0, sizeof(daddr));daddr.nl_family AF_NETLINK;daddr.nl_pid 0; // to kernel daddr.nl_groups 0;/ 填充Netlink消息头部 */nlh (struct nlmsghdr )malloc(NLMSG_SPACE(MAX_PLOAD));memset(nlh, 0, sizeof(struct nlmsghdr));nlh-nlmsg_len NLMSG_SPACE(MAX_PLOAD);nlh-nlmsg_flags 0;nlh-nlmsg_type 0;nlh-nlmsg_seq 0;nlh-nlmsg_pid saddr.nl_pid; //self port/ 设置Netlink的消息内容 /memcpy(NLMSG_DATA(nlh), umsg, strlen(umsg));/ 发送单播消息 */ret sendto(skfd, nlh, nlh-nlmsg_len, 0, (struct sockaddr *)daddr, sizeof(struct sockaddr_nl));if(!ret){perror(sendto error\n);close(skfd);exit(-1);}printf(send kernel:%s\n, umsg);/这个是模板暂时不用纠结为什么要这样用。有时间详细讲解socket时再说/memset(u_info, 0, sizeof(u_info));len sizeof(struct sockaddr_nl);/* 接收消息 */ret recvfrom(skfd, u_info, sizeof(user_msg_info), 0, (struct sockaddr *)daddr, len);if(!ret){perror(recv form kernel error\n);close(skfd);exit(-1);}printf(from kernel:%s\n, u_info.msg);close(skfd);free((void *)nlh);return 0; }运行结果: rootxxx# gcc sender.c -o sender ./sender send kernel:hello netlink!! from kernel:hello users!!![20840.743223] kernel recv from user: hello netlink!!参考资料 linux下netlink的使用简介用户空间和内核空间通讯之【Netlink 上】用户空间和内核空间通讯之【Netlink 中】用户空间和内核空间通讯之【Netlink 下】linux netlink遇到的问题
- 上一篇: 开源网站建设销售助手app最新版本
- 下一篇: 开源网站内容管理系统定制网站大概多少钱
相关文章
-
开源网站建设销售助手app最新版本
开源网站建设销售助手app最新版本
- 技术栈
- 2026年03月21日
-
开源网站代码建一个手机网站需要多少钱
开源网站代码建一个手机网站需要多少钱
- 技术栈
- 2026年03月21日
-
开源手机网站模板网站开发背景 目的
开源手机网站模板网站开发背景 目的
- 技术栈
- 2026年03月21日
-
开源网站内容管理系统定制网站大概多少钱
开源网站内容管理系统定制网站大概多少钱
- 技术栈
- 2026年03月21日
-
开源网站下载app开发编程
开源网站下载app开发编程
- 技术栈
- 2026年03月21日
-
开展网站建设服务网络优化工程师需要具备哪些能力
开展网站建设服务网络优化工程师需要具备哪些能力
- 技术栈
- 2026年03月21日
