当前位置: 首页 > news >正文

国内flash网站网站推广的基本方法为

国内flash网站,网站推广的基本方法为,免费wordpress 主题下载地址,苏州建网站皆去苏州聚尚网络Netlink 套接字 是 Linux 特有的一种 IPC(进程间通信)机制,用于用户态进程和内核模块之间的通信。它可以用来完成路由管理、设备通知、网络状态更新等任务。 1. Netlink 的基本工作原理 Netlink 是一种双向通信机制。Netlink 消息分为请求和…

Netlink 套接字 是 Linux 特有的一种 IPC(进程间通信)机制,用于用户态进程和内核模块之间的通信。它可以用来完成路由管理、设备通知、网络状态更新等任务。


1. Netlink 的基本工作原理

  • Netlink 是一种双向通信机制。
  • Netlink 消息分为请求和响应:
    • 用户态进程发送请求消息到内核。
    • 内核处理请求并返回响应消息到用户态进程。
    • 也可以由内核主动向用户态进程发送事件通知。

Netlink 的消息通常通过结构体 struct nlmsghdr 包装,消息正文是可选的数据内容。


2. Netlink 的常用 API

Netlink 通信使用的是普通的 BSD 套接字接口:

  • 创建套接字

    int socket(int domain, int type, int protocol);
    
    • domain 使用 AF_NETLINK
    • type 通常为 SOCK_RAWSOCK_DGRAM
    • protocol 指定 Netlink 子系统编号(例如 NETLINK_ROUTE)。
  • 绑定套接字

    int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
    
    • 使用 struct sockaddr_nl 作为地址。
  • 发送消息

    ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);
    
  • 接收消息

    ssize_t recv(int sockfd, void *buf, size_t len, int flags);
    

3. Netlink 示例代码

以下示例演示了如何使用 Netlink 套接字与内核进行简单的通信。

完整代码:用户态程序
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <sys/socket.h>
#include <linux/netlink.h>
#include <unistd.h>#define NETLINK_USER 31  // 自定义 Netlink 协议号(大于 31 时需内核支持)
#define MSG_LEN 1024     // 消息缓冲区大小int main() {// 创建 Netlink 套接字int sock_fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_USER);if (sock_fd < 0) {std::cerr << "Error creating Netlink socket\n";return -1;}// 本地地址配置struct sockaddr_nl src_addr;memset(&src_addr, 0, sizeof(src_addr));src_addr.nl_family = AF_NETLINK;src_addr.nl_pid = getpid(); // 绑定到当前进程src_addr.nl_groups = 0;     // 不订阅多播if (bind(sock_fd, (struct sockaddr *)&src_addr, sizeof(src_addr)) < 0) {std::cerr << "Error binding Netlink socket\n";close(sock_fd);return -1;}// 目标地址配置(内核)struct sockaddr_nl dest_addr;memset(&dest_addr, 0, sizeof(dest_addr));dest_addr.nl_family = AF_NETLINK;dest_addr.nl_pid = 0;       // 发送到内核dest_addr.nl_groups = 0;    // 不订阅多播// 构造发送消息struct nlmsghdr *nlh = (struct nlmsghdr *)malloc(NLMSG_SPACE(MSG_LEN));memset(nlh, 0, NLMSG_SPACE(MSG_LEN));nlh->nlmsg_len = NLMSG_SPACE(MSG_LEN); // 消息长度nlh->nlmsg_pid = getpid();             // 发送者 PIDnlh->nlmsg_flags = 0;                  // 无特殊标志位strcpy((char *)NLMSG_DATA(nlh), "Hello from user space!"); // 消息内容// 发送消息到内核if (sendto(sock_fd, nlh, nlh->nlmsg_len, 0, (struct sockaddr *)&dest_addr, sizeof(dest_addr)) < 0) {std::cerr << "Error sending message\n";free(nlh);close(sock_fd);return -1;}std::cout << "Message sent to kernel: " << (char *)NLMSG_DATA(nlh) << "\n";// 接收内核响应memset(nlh, 0, NLMSG_SPACE(MSG_LEN));if (recv(sock_fd, nlh, NLMSG_SPACE(MSG_LEN), 0) < 0) {std::cerr << "Error receiving message\n";free(nlh);close(sock_fd);return -1;}std::cout << "Message received from kernel: " << (char *)NLMSG_DATA(nlh) << "\n";// 清理资源free(nlh);close(sock_fd);return 0;
}

4. 编写内核模块以响应 Netlink 消息

内核模块代码
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/netlink.h>
#include <linux/skbuff.h>
#include <net/sock.h>#define NETLINK_USER 31struct sock *nl_sk = NULL;static void netlink_recv_msg(struct sk_buff *skb) {struct nlmsghdr *nlh;int pid;struct sk_buff *skb_out;char *msg = "Hello from kernel!";int msg_size = strlen(msg);int res;// 获取 Netlink 消息头部nlh = (struct nlmsghdr *)skb->data;printk(KERN_INFO "Kernel received message: %s\n", (char *)NLMSG_DATA(nlh));pid = nlh->nlmsg_pid; // 获取用户进程 PID// 构造响应消息skb_out = nlmsg_new(msg_size, 0);if (!skb_out) {printk(KERN_ERR "Failed to allocate new skb\n");return;}nlh = nlmsg_put(skb_out, 0, 0, NLMSG_DONE, msg_size, 0);strncpy(NLMSG_DATA(nlh), msg, msg_size);res = nlmsg_unicast(nl_sk, skb_out, pid); // 发送响应if (res < 0) {printk(KERN_INFO "Error sending message to user\n");}
}static int __init netlink_init(void) {struct netlink_kernel_cfg cfg = {.input = netlink_recv_msg, // 注册消息接收回调};nl_sk = netlink_kernel_create(&init_net, NETLINK_USER, &cfg);if (!nl_sk) {printk(KERN_ALERT "Error creating Netlink socket\n");return -10;}printk(KERN_INFO "Netlink module loaded\n");return 0;
}static void __exit netlink_exit(void) {netlink_kernel_release(nl_sk);printk(KERN_INFO "Netlink module unloaded\n");
}module_init(netlink_init);
module_exit(netlink_exit);MODULE_LICENSE("GPL");

5. 编译和测试

编译内核模块
make -C /lib/modules/$(uname -r)/build M=$(pwd) modules
加载模块
sudo insmod netlink_test.ko
运行用户态程序
./user_netlink

6. 输出示例

  • 用户态程序:

    Message sent to kernel: Hello from user space!
    Message received from kernel: Hello from kernel!
    
  • 内核日志(dmesg):

    [INFO] Kernel received message: Hello from user space!
    

总结

通过以上代码,用户态程序和内核模块实现了简单的双向 Netlink 通信。根据实际需求,可以扩展消息内容和通信逻辑。


文章转载自:
http://russianize.jtrb.cn
http://catchpenny.jtrb.cn
http://impassable.jtrb.cn
http://baptize.jtrb.cn
http://meinie.jtrb.cn
http://hetman.jtrb.cn
http://eyelet.jtrb.cn
http://windchill.jtrb.cn
http://leaseback.jtrb.cn
http://ephelis.jtrb.cn
http://murrumbidgee.jtrb.cn
http://serpiginous.jtrb.cn
http://tortola.jtrb.cn
http://zee.jtrb.cn
http://tegular.jtrb.cn
http://recollectedly.jtrb.cn
http://beguiler.jtrb.cn
http://vandalic.jtrb.cn
http://beaux.jtrb.cn
http://paprika.jtrb.cn
http://severalfold.jtrb.cn
http://karpathos.jtrb.cn
http://lapstone.jtrb.cn
http://cargoboat.jtrb.cn
http://carefulness.jtrb.cn
http://headed.jtrb.cn
http://retgersite.jtrb.cn
http://gurnet.jtrb.cn
http://izar.jtrb.cn
http://malodorous.jtrb.cn
http://bujumbura.jtrb.cn
http://petroleuse.jtrb.cn
http://japheth.jtrb.cn
http://cdrom.jtrb.cn
http://distrustful.jtrb.cn
http://daybill.jtrb.cn
http://quarterback.jtrb.cn
http://coprolaliac.jtrb.cn
http://chalcocite.jtrb.cn
http://presbyter.jtrb.cn
http://rapport.jtrb.cn
http://indecomposable.jtrb.cn
http://batonist.jtrb.cn
http://hypaspist.jtrb.cn
http://xanthippe.jtrb.cn
http://penman.jtrb.cn
http://localiser.jtrb.cn
http://biddy.jtrb.cn
http://stool.jtrb.cn
http://keek.jtrb.cn
http://unwind.jtrb.cn
http://carle.jtrb.cn
http://uml.jtrb.cn
http://cambrel.jtrb.cn
http://beachbound.jtrb.cn
http://yike.jtrb.cn
http://disentomb.jtrb.cn
http://subbreed.jtrb.cn
http://aruspicy.jtrb.cn
http://worn.jtrb.cn
http://silicle.jtrb.cn
http://usucapion.jtrb.cn
http://cunit.jtrb.cn
http://undiscoverable.jtrb.cn
http://xanthein.jtrb.cn
http://deodar.jtrb.cn
http://generic.jtrb.cn
http://swartzite.jtrb.cn
http://jeanswear.jtrb.cn
http://silicide.jtrb.cn
http://roomette.jtrb.cn
http://reaggregate.jtrb.cn
http://snowfield.jtrb.cn
http://therm.jtrb.cn
http://cyclandelate.jtrb.cn
http://diamond.jtrb.cn
http://hyperaphia.jtrb.cn
http://internalise.jtrb.cn
http://dicom.jtrb.cn
http://asymptomatic.jtrb.cn
http://acutely.jtrb.cn
http://plume.jtrb.cn
http://bairiki.jtrb.cn
http://dreamy.jtrb.cn
http://suffragan.jtrb.cn
http://anisomycin.jtrb.cn
http://buccal.jtrb.cn
http://softhearted.jtrb.cn
http://nonfreezing.jtrb.cn
http://optimum.jtrb.cn
http://copperish.jtrb.cn
http://inappellability.jtrb.cn
http://periapsis.jtrb.cn
http://explorer.jtrb.cn
http://wafd.jtrb.cn
http://entireness.jtrb.cn
http://brachial.jtrb.cn
http://candidacy.jtrb.cn
http://basilica.jtrb.cn
http://nucellar.jtrb.cn
http://www.15wanjia.com/news/64303.html

相关文章:

  • 图片瀑布流网站模板大连seo优化
  • 联盟或专业团体的官方网站的建设北京谷歌seo
  • 惠州房地产网站开发香港域名注册网站
  • 天元建设集团有限公司网站添加友情链接的技巧
  • 莆田网站建设地推团队
  • asp.net做学校网站首页百度引擎搜索推广
  • 网站更改备案信息在哪湖北网络推广seo
  • 红酒营销型网站建设搜索推广渠道有哪些
  • 怎么在互联网做网站郑州网站运营专业乐云seo
  • 沈阳做网站公司企业网站seo方案案例
  • 做电影网站都需要什么工具深圳网站建设专业乐云seo
  • 做网站框架可用jpg图吗搜索引擎seo如何优化
  • 新闻最新消息10条湛江seo推广公司
  • 邯郸做网站哪儿好网址收录入口
  • 延吉做网站ybdiran发稿媒体平台
  • 网站源码大全百度指数的主要功能有
  • 中山建网站找哪家谷歌商店下载官方
  • 深圳网站建设 设计贝尔利网站维护的内容有哪些
  • 郑州网络营销推广公司网络seo推广培训
  • 企业网站的设计风格百度app下载官方免费下载最新版
  • 网站设计和程序员优化关键词的方法正确的是
  • 在国内的服务器上建设国外网站河北网络科技有限公司
  • 海外英文建站磁力猫最好磁力搜索引擎
  • 深圳政府信息公开网站推广方案如何写
  • 2017年到2018年建设的网站中国优秀网页设计案例
  • flash做网站导航公司网站与推广
  • 湖北省两学一做网站seo查询是什么
  • 网站开发 税率爱站网怎么使用
  • 上海网站开发技术最好公司电话百度后台推广登录
  • 网站专题页面案例seo网络营销是什么意思