- 博客(29)
- 资源 (1)
- 收藏
- 关注

原创 基于netfilter截取内核网络数据包
Netfilter结构就是在整个网络处理流程中放置了一些检测点,每个检测点都可以对网络数据包进行操作,IP层的五个hook点如图:
2021-05-30 15:02:31
311
原创 C++ STL之std::map:红黑树的魔法与性能测试
最近在使用C++写代码,也是刚接触C++,恰巧碰到一个需要使用map的地方,不知道其查找元素的性能怎么样,所以研究了下,做个记录,目前从x86平台测试map查找一个元素大概需要2us,这里你需要考虑在自身硬件平台比如arm,做一些cpu加压情况下再查看map效率以评估map是否满足业务需求。本文将深入探讨std::map以及其核心红黑树的原理,解释其关键特性,包括插入、查找和删除操作,以及有序性的优势。如果一个节点是红色的,那么它的子节点必须是黑色的:这一性质确保没有两个相邻的红色节点。
2023-10-20 23:12:00
489
原创 pcie电源管理
这个状态的目的是节省链路的电力消耗。PCIe通信包括L0,L0s,L1,L2,L3五种状态,其中L0是工作状态,L0s是睡眠状态,L1是低功耗状态,L2是更低的功耗状态,L3是更低的功耗状态.L1是PCI Express链路电源管理的一种状态,指的是链路中的设备在空闲状态下的高休眠状态。在进入L1状态和L2状态时,需要满足一些先决条件,例如设备必须支持L1和L2状态,并且连接必须支持L1和L2状态。请注意,不是所有的PCIe设备都支持所有的D状态和L状态,具体的支持情况取决于设备的硬件和驱动程序的实现。
2023-08-12 20:44:08
4077
原创 一起撸linux内核29-编译内核并使用qemu运行起来
gcc-arm-linux-gnueabi和gcc-arm-linux-gnueabihf的区别:gcc-arm-linux-gnueabi是针对软浮点运算,gcc-arm-linux-gnueabihf针对硬浮点运算。这里我遇到了问题,需要通过sudo apt install u-boot-tools来安装uboot-tools。在同一个目录下,创建一个qemu的启动脚本start.sh:。然后把内核和设备树拷贝到一个目录里:。配置编译:。......
2022-08-07 20:57:42
825
原创 sk_buff操作函数(1)
我使用的Linux内核版本4.4.266sk_buff所在的文件/linux-4.4.266/include/linux/skbuff.h
2021-06-08 17:03:46
318
原创 sk_buff详解
我用的Linux内核版本4.4.266sk_buff结构体定义在文件/linux-4.4.266/include/linux/skbuff.h
2021-06-07 17:43:44
573
原创 cmake安装后执行cmake error:could not find cmake_root!!!
cmake安装后执行cmake error:could not find cmake_root!!! 如图:解决办法:hash -r 清空缓存的hash表扩展:hash命令系统初始hash表为空,当外部命令执行时,默认会从PATH路径下寻找该命令,找到后会将这条命令的路径记录到hash表中,当再次使用该命令时,shell解释器首先会查看hash表,存在将执行之,如果不存在,将会去PATH路径下寻找,利用hash缓存表可大大提高命令的调用速率。...
2021-05-24 09:02:48
1377
原创 01-关于镜像的笔记
镜像的操作:docker pull 拉取远程仓库的镜像到本地 docker tag 重命名镜像 docker image 查看本地存在的镜像 docker rmi 删除无用镜像 构建镜像: docker build 基于dockerfile构建镜像 docker commit 基于已运行的容器提交为镜像 构建镜像的方式:1,使用docker commit 说几个选项的含义:选项 选项简写 说明 –detach -d 在后台运行容器,并且打印容器
2021-05-22 10:19:55
165
原创 crond服务总结
昨天翻阅程序发现服务器端管理程序的启动方式很特别,在之前是由init进程启动程序脚本里的进程,昨天发现服务程序并没有在任何脚本中有启动的体现,但是服务程序确实是启动了,经过一番查找发现原来是crond定时启动被触发然后启动了服务程序。crond很久不见了,现在整理下。 了解 crond是一个后台守护进程,定时执行任务。最小检测时间是分钟。crontab是用来增删改查定时任务的工具。每个用户都有自己的crontab,虽然文件位于/var/spool/cron/crontab但是不能直接编辑。位
2021-05-22 10:19:04
648
原创 beego项目部署到nginx(含http转https)
之前的程序部署到服务器采用的直接部署,比较方便,现在把它部署到nginx,以便后续的反向代理和负载均衡,同时,因为要接入微信小程序,所以需要将之前的域名http://www.xxxxxx.com转成https://www.xxxxxx.com。更多内容可关注公众号,里面都是作者原创。1,安装Nginx。 卸载原来的nginx:sudo apt-get —purge autoremove nginx安装nginx:sudo apt-get install ngin...
2021-05-22 09:04:20
542
1
原创 nanomsg安装和测试
最近在构建一个中间层的通信架构,本来想用dbus,在实验过程中发现dbus对于国产系统支持版本比较低,安装比较麻烦,今天无意中看中了nanomsg,尽管没有dbus那么强悍的生态,但基本能满足需求。 nanomsg是一个轻量级的消息通信组件,是zeromq的作者之一用C语言去重写的通信框架,其无需进一步依赖,可在多种操作系统运行。介绍就不多说了,可直接去官网查询,该官网是我目前见过感觉最简洁大方的网站。更多内容可关注公众号官网地址:https://nanomsg.org/...
2021-05-22 09:00:07
1197
原创 QT实现五子棋游戏
FIR.pro#-------------------------------------------------## Project created by QtCreator 2012-09-01T15:09:11##-------------------------------------------------QT += core guiTARGET = FIRTEMPLATE = appSOURCES += main.cpp\ widget.
2021-05-22 08:58:37
258
1
原创 leetcode-206翻转链表
关注囧囧妹了解更多的编程知识题目: 反转一个单链表。可以迭代或递归地反转链表。 示例:输入: 1->2->3->4->5->NULL;输出: 5->4->3->2->1->NULL。 算法说明:声明两个临时变量tmp和prev,且初始值为NULL;当遍历节点不为NULL则循环以下四步:1,将链表要翻转的当前节点的next节点保存到tmp;2,将当前节点的next节点指向前一个节点prev;...
2021-05-22 08:53:04
107
原创 linux软件包管理器安装和编译
linux安装软件大致有两种方式: 1,通过包管理器安装 2,通过源码编译包管理器安装 主流的包管理器有rpm和dpkg,dpkg一般用于衍生于debian的linux操作系统,如ubuntu。rpm一般用于redhat,centos。 rpm和dpkg都提供了查询安装的某个软件包,安装,删除等一系列指令。 但是存在一个依赖的问题,如何解决呢? 用dpkg或rpm的时候可能需要解决十几个依赖包的问题,过程艰辛,因此现在大多在使用apt和yum。 yum的服.
2021-05-22 08:48:08
294
原创 关于函数和方法总结
匿名函数:类似与C中的函数指针,定义一个函数,该函数的地址通过一个指针指向,然后操作该指针。如:func main(){ ptr := func(a,b int) int { return a+b } fmt.Println(ptr(2,3))}所谓闭包就是在函数内定义的内部函数,可以使用外部函数的变量。如:func main(){ ptr := culcu() fmt.Println(ptr()) fmt.Pr
2021-05-22 08:47:01
112
原创 linux系统性能分析工具使用(1)
该文通过实战性能分析来学习工具的使用和总结的大致分析步骤以供参考。系统ubuntu 18.04首先需安装如下:sudo apt-get install sysbenchsudo apt-get install sysstat获取root;sudo -i 快速切换到root,不加-i会以非登录模式切换,不会拿到root的环境的变量开始前先查看当前系统的情况:root@parallels-Parallels-Virtual-Platform:~# vmstatprocs ------
2021-05-22 08:43:10
154
原创 perf工具
最近学习go,看到古狗对go程序分析做了很多性能分析的工具,发现真心不错,所以我在想c有没有比较直观的工具,之前对内存用过valgrind,显然它并不直观,需要人为的去分析那些数据,perf工具产生的data依然不是很好分析,这里感谢开源,Flamegraph可以把perf产生的数据生成火焰图,尽管和go的Pprof没法比,但已然不错了。【perf安装】parallels@parallels-Parallels-Virtual-Platform:~$ perfCommand ‘perf’ not f
2021-05-21 16:54:57
497
原创 离线安装gcc----解决error trying to exec ‘cc1’: execvp: 没有该文件或目录的错误
centos中安装gcc后编译程序出现提示:gcc: error trying to exec 'cc1': execvp: 没有该文件或目录的错误以前在ubuntu或者mint中都是执行sudo apt-get install build-essential来解决,现在找到一种手动安装的方法。还需要安装如下几个安装包: 【1】rpm包下载地址:http://www.rpmfind.net/linux/RPM/index.html 【2】解压centos镜像得到packages,里面包含系统.
2021-05-21 16:52:50
5383
1
原创 安装protobuf-c遇到的问题
configure: error: Package requirements (protobuf >= 2.6.0) were not met:No package ‘protobuf’ foundConsider adjusting the PKG_CONFIG_PATH environment variable if youinstalled software in a non-standard prefix.Alternatively, you may set the enviro
2021-05-21 16:51:22
2098
原创 do{}while()
do确保{}的内容肯定被执行,while(0)确保内容只执行一次;1,定义宏,原来我会用宏定义定义一些简单的函数,但是阅读起来不友好,且复杂,可以采用该办法定义。#define ERRCODE(code) do{char s[256]; strcpy(s,errCode(code));printf(“%s\n”,s);}while(0)2,控制逻辑,在一些强制跳转的地方常常用到goto,但是goto的做法使得代码不容易读,且有时候在面对函数正常执行到最后时候的处理比较麻烦,可以采用:int.
2021-05-21 16:49:00
416
原创 protobuf
protobuf是古狗在08年出的将数据序列化和反序列化库,跨平台跨语言。现在proto3和proto2还是有一些不一样的,proto3支持更多语言和功能同时舍弃了一些复杂的语法,更强调约定而弱化了语法,对快速编写proto有很大帮助。这也是我在原单位一直推崇的一种设计,将所有产品共有,相似的地方进行统一和实现跨语言跨平台,特别是协议和算法,目前这种设计方式有个新名词叫“中台”—-相对于前台和后台来说的。【安装protobuf】1,https://github.com/protocolbuffers
2021-05-21 16:47:58
459
原创 c实现多态 – 基于虚函数表
以前经常在想面向对象中的多态问题,用c实现不就是一个函数的问题么,感觉也没什么大惊小怪的,后来慢慢的意识到其实在java中多态解决的问题是分离的问题,上层业务和底层方法实现的一个完全分离,在语言上讲是源码编译期依赖和运行期依赖的一种分离,在java中随着对象和方法的增加,业务层可以独立开发,独立部署,一个变化不会影响另一个变化,且编译期不会出错,直到运行期时进行方法绑定执行才会报错,而之前我用c实现的多态是一个在编译期就要绑定方法,并不是运行期,这样也达不成分层的效果,所以要实现分层就要借助于虚函数表。
2021-05-21 16:46:37
199
原创 beego注解路由不生成的解决问题
首先确定app.conf内的runmode的值是否是dev,如果确定了是,那你就碰到了一个Beego到现在都没解决的bug,解决办法如下:在main.go加入下列代码//go:generate sh -c "echo 'package routers; import \"github.com/astaxie/beego\"; func init() {beego.BConfig.RunMode = beego.DEV}' > routers/0.go"//go:generate sh -.
2021-05-21 16:40:17
1460
1
原创 c-go混合编写后台程序部署记录
转载:http://62.234.110.144:8991/2019/10/17/c-go%E6%B7%B7%E5%90%88%E7%BC%96%E5%86%99%E5%90%8E%E5%8F%B0%E7%A8%8B%E5%BA%8F%E9%83%A8%E7%BD%B2%E8%AE%B0%E5%BD%95/之前花了两周完成了一款简单的服务器后台设计和开发,一直在mac上开发和调试,今天要部署到服务器上,简单记录如下:服务器:国产芯片 mips64平台后台采用的c语言和go语言开发web框架采用的
2021-05-21 16:38:41
128
原创 libevent源码分析和socket程序编写示例
/*==============================================================================* 2019 -06-30 写在最前面* libevent 简介不多说* 安装:* -->libevent.org官网下载,* 我用的最新的2.1.10稳定版和之前的1.4.x版本还是有些区别的,* 比如事件的内部结构体定义,循环处理,小根堆,线程安全等,* 感觉新版本对以前的功能和安全做了完善* -->解压ta.
2021-05-21 16:35:07
136
原创 C实现小顶堆----基于数据流中找出一段数据的最小值
转载:http://62.234.110.144:8991/2019/07/20/c%E5%AE%9E%E7%8E%B0%E5%B0%8F%E9%A1%B6%E5%A0%86-%E5%9F%BA%E4%BA%8E%E6%95%B0%E6%8D%AE%E6%B5%81%E4%B8%AD%E6%89%BE%E5%87%BA%E4%B8%80%E6%AE%B5%E6%95%B0%E6%8D%AE%E7%9A%84%E6%9C%80%E5%B0%8F%E5%80%BC/#include <stdio.h
2021-05-21 16:31:13
203
原创 go交叉编译sqlite3
交叉编译配置1,export CGO_ENABLED=12,export GOOS=linux3,export GOARCH=amd644,go build -o ./bin/example ./cmd/错误详情1,sqlite3-binding.c:32753:42: error: use of undeclared identifier ‘pread64’2,sqlite3-binding.c:32771:42: error: use of undeclared identifier ‘p
2021-05-19 09:38:17
1200
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人