自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

影帝

技术交流

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

原创 基于netfilter截取内核网络数据包

Netfilter结构就是在整个网络处理流程中放置了一些检测点,每个检测点都可以对网络数据包进行操作,IP层的五个hook点如图:

2021-05-30 15:02:31 273

原创 C++ STL之std::map:红黑树的魔法与性能测试

最近在使用C++写代码,也是刚接触C++,恰巧碰到一个需要使用map的地方,不知道其查找元素的性能怎么样,所以研究了下,做个记录,目前从x86平台测试map查找一个元素大概需要2us,这里你需要考虑在自身硬件平台比如arm,做一些cpu加压情况下再查看map效率以评估map是否满足业务需求。本文将深入探讨std::map以及其核心红黑树的原理,解释其关键特性,包括插入、查找和删除操作,以及有序性的优势。如果一个节点是红色的,那么它的子节点必须是黑色的:这一性质确保没有两个相邻的红色节点。

2023-10-20 23:12:00 393

原创 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 3362

原创 自学车载以太网笔记(2)

关注囧囧妹微信公众号了解更多内容

2022-08-07 21:11:40 3101 1

原创 自学车载以太网笔记(1)

关注囧囧妹微信公众号了解更多内容

2022-08-07 21:07:50 856

原创 一起撸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 742

原创 sk_buff操作函数(1)

我使用的Linux内核版本4.4.266sk_buff所在的文件/linux-4.4.266/include/linux/skbuff.h

2021-06-08 17:03:46 289

原创 sk_buff详解

我用的Linux内核版本4.4.266sk_buff结构体定义在文件/linux-4.4.266/include/linux/skbuff.h

2021-06-07 17:43:44 523

原创 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 1309

原创 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 128

原创 crond服务总结

昨天翻阅程序发现服务器端管理程序的启动方式很特别,在之前是由init进程启动程序脚本里的进程,昨天发现服务程序并没有在任何脚本中有启动的体现,但是服务程序确实是启动了,经过一番查找发现原来是crond定时启动被触发然后启动了服务程序。crond很久不见了,现在整理下。 了解 crond是一个后台守护进程,定时执行任务。最小检测时间是分钟。crontab是用来增删改查定时任务的工具。每个用户都有自己的crontab,虽然文件位于/var/spool/cron/crontab但是不能直接编辑。位

2021-05-22 10:19:04 595

原创 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 499 1

原创 nanomsg安装和测试

最近在构建一个中间层的通信架构,本来想用dbus,在实验过程中发现dbus对于国产系统支持版本比较低,安装比较麻烦,今天无意中看中了nanomsg,尽管没有dbus那么强悍的生态,但基本能满足需求。 nanomsg是一个轻量级的消息通信组件,是zeromq的作者之一用C语言去重写的通信框架,其无需进一步依赖,可在多种操作系统运行。介绍就不多说了,可直接去官网查询,该官网是我目前见过感觉最简洁大方的网站。更多内容可关注公众号官网地址:https://nanomsg.org/...

2021-05-22 09:00:07 1111

原创 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 232 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 88

原创 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 261

原创 关于函数和方法总结

匿名函数:类似与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 87

原创 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 126

原创 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 439

原创 离线安装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 4951 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 1893

原创 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 395

原创 protobuf

protobuf是古狗在08年出的将数据序列化和反序列化库,跨平台跨语言。现在proto3和proto2还是有一些不一样的,proto3支持更多语言和功能同时舍弃了一些复杂的语法,更强调约定而弱化了语法,对快速编写proto有很大帮助。这也是我在原单位一直推崇的一种设计,将所有产品共有,相似的地方进行统一和实现跨语言跨平台,特别是协议和算法,目前这种设计方式有个新名词叫“中台”—-相对于前台和后台来说的。【安装protobuf】1,https://github.com/protocolbuffers

2021-05-21 16:47:58 408

原创 c实现多态 – 基于虚函数表

以前经常在想面向对象中的多态问题,用c实现不就是一个函数的问题么,感觉也没什么大惊小怪的,后来慢慢的意识到其实在java中多态解决的问题是分离的问题,上层业务和底层方法实现的一个完全分离,在语言上讲是源码编译期依赖和运行期依赖的一种分离,在java中随着对象和方法的增加,业务层可以独立开发,独立部署,一个变化不会影响另一个变化,且编译期不会出错,直到运行期时进行方法绑定执行才会报错,而之前我用c实现的多态是一个在编译期就要绑定方法,并不是运行期,这样也达不成分层的效果,所以要实现分层就要借助于虚函数表。

2021-05-21 16:46:37 177

原创 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 1399 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 103

原创 libevent源码分析和socket程序编写示例

/*==============================================================================* 2019 -06-30 写在最前面* libevent 简介不多说* 安装:* -->libevent.org官网下载,* 我用的最新的2.1.10稳定版和之前的1.4.x版本还是有些区别的,* 比如事件的内部结构体定义,循环处理,小根堆,线程安全等,* 感觉新版本对以前的功能和安全做了完善* -->解压ta.

2021-05-21 16:35:07 114

原创 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 184

原创 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 1119

充电桩和bms协议c封装

使用c语言对直流充电桩中充电模块与bms的标准can协议封装以及充电流程的调用逻辑,支持单片机,linux,freertos调用。

2020-08-01

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除