10 2022 档案
Netlink通信机制 与 Generic netlink 数据解析
摘要:一、Netlink通信机制 Netlink是linux提供的用于内核和用户态进程之间的通信方式。但是注意虽然Netlink主要用于用户空间和内核空间的通信,但是也能用于用户空间的两个进程通信。只是进程间通信有其他很多方式,一般不用Netlink。除非需要用到Netlink的广播特性时。 那么Netl
阅读全文
Netlink 与 struct genl_family 结构体
摘要:一、struct 1 //#include <net/genetlink.h> 2 #ifndef __NET_GENERIC_NETLINK_H 3 #define __NET_GENERIC_NETLINK_H 4 5 #include <linux/genetlink.h> 6 #includ
阅读全文
Netfilter 与 struct nf_hook_ops 相关
摘要:nf_hook_ops数据结构 1 struct nf_hook_ops 2 { 3 struct list_head list; //链表成员 4 /* User fills in from here down. */ 5 nf_hookfn *hook; //钩子函数指针 6 struct mo
阅读全文
Linux内核:从struct sk_buff *skb获取struct ethhdr 、struct iphdr 、struct tcphdr、struct tcphdr
摘要:一、struct ethhdr 结构体 1、使用struct ethhdr结构体来表示以太网帧的头部。这个struct ethhdr结构体位于#include<linux/if_ether.h>之中。 #define ETH_ALEN 6 //定义了以太网接口的MAC地址的长度为6个字节#defin
阅读全文
Linux struct sk_buff *skb 结构体
摘要:struct sk_buff是linux网络系统中的核心结构体,linux网络中的所有数据包的封装以及解封装都是在这个结构体的基础上进行。 sk_buff是Linux网络中最核心的结构体,它用来管理和控制接收或发送数据包的信息。各层协议都依赖于sk_buff而存在。 内核中sk_buff结构体在各层
阅读全文
libev 库使用
摘要:1、libev所实现的功能就是一个强大的reactor,可能notity事件主要包括下面这些: ev_io // IO可读可写 ev_stat // 文件属性变化 ev_async // 激活线程 ev_signal // 信号处理 ev_timer // 定时器 ev_periodic // 周期
阅读全文
快速排序
摘要:首先我们要对一组数据进行排序: 在数组中选一个基准数(通常为数组第一个,黄圈圈标记了); 将数组中小于基准数的数据移到基准数左边,大于基准数的移到右边,怎么移动,后面说; 对于基准数左、右两边的数组,不断重复以上两个过程,直到每个子集只有一个元素,即为全部有序。 好了,咱们开始吧! 快速排序需要两个
阅读全文
堆排序
摘要:一 准备知识 堆的结构可以分为大根堆和小根堆,是一个完全二叉树,而堆排序是根据堆的这种数据结构设计的一种排序,下面先来看看什么是大根堆和小根堆 1.1 大根堆和小根堆 性质:每个结点的值都大于其左孩子和右孩子结点的值,称之为大根堆;每个结点的值都小于其左孩子和右孩子结点的值,称之为小根堆。如下图 我
阅读全文
Linux进程间通信——使用信号量
摘要:一、什么是信号量 为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行线程访问代码的临界区域。临界区域是指执行数据更新的代码需要独占式地执行。而信号量就可以提供这样的一种访问机制,让一个临界区同一时间只有一个线程在访
阅读全文
__builtin_expect函数
摘要:一、背景 在很多源码如Linux内核、Glib等,我们都能看到likely()和unlikely()这两个宏,通常定义如下 #define likely(x) __builtin_expect(!!(x), 1)#define unlikely(x) __builtin_expect(!!(x),
阅读全文