- 博客(20)
- 收藏
- 关注
原创 第三方库设置内存管理函数hooks(libevent curl openssl protobuf-c sqlite)
第三方库设置内存管理函数hooks(libevent curl openssl protobuf-c sqlite)libeventvoid event_set_mem_functions(void *(*malloc_fn)(size_t sz), void *(*realloc_fn)(void *ptr, size_t sz), void (*free_fn)(void *ptr))
2021-03-06 11:09:53
308
原创 内存泄漏,内存黑洞问题定位
内存泄漏,内存黑洞问题定位1. free查看内存概况[root@VM_0_17_centos ~]# free total used free shared buff/cache availableMem: 1883844 376664 76136 192 1431044 1311252Swap: 1048572 30540 10
2021-03-06 10:49:05
2547
原创 UNIX套接字“\0XXX“ 格式化抽象本地地址
UNIX套接字"\0XXX" 格式化抽象本地地址创建AF_UNIX unix套接字,路径名的第一个字节为空字节时,就可以让本地套接口地址成为了格式化抽象本地地址,在路径名中空字节之后的字节才会成为抽象名字的一部分。int32_t sock = -1; int32_t one = 1;sock = socket(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0);struct sockaddr_un addr = { .sun_family = AF_UNIX,
2021-03-05 16:30:28
457
原创 Lunix I/O总结
Lunix I/O总结文件概念:定义:文件:一组相关数据的有序集合。文件名:这个数据集合的名称。按类型分类:常规文件ASCII码文件 : ASCII 是可以用任何文字处理程序阅读的简单文本文件二进制的文件: 图形文件及文字处理程序等计算机程序都属于二进制文件由于很难严格区分文本文件和二进制文件的概念,所以我们可以简单地认为,如果一个文件专门用于存储文本字符的数据,没有包含字符以外的其他数据,我们就称之为文本文件,除此之外的文件就是二进制文件。七种:bcd-lspb (block):块设
2021-02-01 19:42:28
266
原创 sqlite3 多綫程/事務回滾/busy handler/簡單使用
sqlite3 簡介及數據庫操作简介SQLite数据库是专门针对嵌入式开发的数据库软件,占用资源非常少(仅需几百K内存即可),处理速度快,而且可以直接使用C语言编程,同时也可以配合C#、PHP、Java等其他语言。SQLite诞生于2000年,2015年发布了新版本SQLite3,一经推出马上变成了最流行的嵌入式数据库软件。//SQL中文翻译为“结构化查询语言”,是单词"Structured Query Language"的缩写。SQL是一种操作数据库的高级的非过程化编程语言,用户使用SQL命令通过D
2020-12-31 18:23:20
1256
原创 protobuf-c 基本使用及样例
protobuf-c 基本使用及样例Protobuf简介https://cloud.tencent.com/developer/article/1199069一、数据类型照proto类型C/C++类型proto类型C/C++类型doubledoublefloatfloatint32int32int64int64uint32uint32uint64uint64sint32int32sint64int64fixed32uint32
2020-12-29 19:51:06
2381
原创 json-c简介及基本使用
json-c简介及基本使用JSON(JavaScript Object Notation) 是一种**轻量级的数据交换格式**。它基于ECMAScript的一个子集。 JSON选用完全独立于言语的文本格局,但是也使用了类似于C言语宗族的习气(包含C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使json调试成为抱负的数据交换言语。 易于人阅览和编写,同时也易于机器解析和生成(一般用于提高网络传输速率)。JSON的格式JSON 数据的书写格式是键(名称)/值对。
2020-12-29 15:52:47
7828
1
原创 openssl 对称/非对称加密 AES CBC模式加解密
openssl 对称/非对称加密 AES CBC模式加解密对称加密: 在加密和解密过程中使用相同的密钥, 或是两个可以简单地相互推算的密钥的加密算法.非对称加密: 也称为公开加密, 它需要一个密钥对, 一个是公钥, 一个是私钥, 一个负责加密, 一个负责解密.对称加密在性能上要优于非对称加密, 但是安全性低于非对称加密.主流的对称加密方式有 DES, AES. 这两种加密方式都属于分组加密, 先将明文分成多个等长的模块 ( block ), 然后进行加密.DES 加密AES 加密非
2020-12-21 18:47:59
1106
1
原创 Internet checksum 算法(Ip checksum)
Internet checksum 算法(Ip checksum)/***************************************************************************** * NAME: HeaderChecksum * * DESCRIPTION: * this function calculates the header's checksum. it is * exactly the Internet checksum
2020-11-20 16:20:37
515
转载 那些年遇到的坑,rpmbuild
rpm制作的包在安装之后发现二进制被压缩改变了,出现了缺少调试信息的现象;gdb xxxReading symbols from xxx...(no debugging symbols found)...done.编译时已经增加-g选项;且将编译后的二进制直接上传运行环境不会出现此现象,怀疑在rpm制作产生了问题;经过调研,rpm制作时会strip二进制以达到减少文件大小的目的,此操作默认开启,导致调试信息被strip;When we create an RPM using rpmbuild,
2020-11-20 15:57:09
441
原创 限速算法基于令牌桶算法
限速算法基于令牌桶算法1)记最大速度单位为S,第一次发送开始时,记当前时间为T,记令牌桶初始化N=0, N最大值为2S,最小发送单位M=S/4,发送间隔I = 200ms2)发送前记录当前时间为t,如果 S(t-T) + N >= 2S, 令N = 2S, T = t ,发送M数据,休眠I时间3)发送前记录当前时间为t, 如果 M < S(t-T) + N < 2S,则发送M数据,休眠I时间4)发送前记录当前时间为t,如果 S(t-T) + N < M, 则使N = N +
2020-11-09 16:48:14
427
原创 那些年遇到的坑openssl线程安全问题
那些年遇到的坑openssl线程安全问题#5 0x00000000005a9fed in CRYPTO_free ()No symbol table info available.#6 0x00000000005d60f5 in engine_pkey_meths_free ()No symbol table info available.#7 0x00000000005d2d34 in engine_free_util ()No symbol table info available.
2020-11-04 17:09:37
2253
原创 那些年遇到的坑不可重入函数inet_ntoa
那些年遇到的坑不可重入函数inet_ntoainet_ntoa–不可重入函数char *inet_ntoa(struct in_addr in);The string is returned in a statically allocated buffer, which subsequent calls will overwrite. unsigned long n1 = inet_addr("10.213.120.1"); unsigned long n2 = inet_addr("1
2020-11-04 17:00:39
274
原创 那些年遇到的坑---EPOLL(cpu100%/卡死)
那些年遇到的坑—EPOLL(cpu100%/卡死)最近在定位BUG时发现了这么一个问题程序跑的设备上4个CPU只有一个CPU是跑满的状态,其他CPU的占用率都非常低,且此设备上几乎无业务。通过火焰图定位是哪个模块出现问题之后,通过pstack 看看有问题的这个进程在干什么pstack pid#0 0x00007fbea3424d43 in epoll_wait () from /lib64/libc.so.6通过pstack 可以看到,有大量的系统调用sys_epoll_wait占用了CPU
2020-11-04 16:47:43
4675
原创 性能分析工具:perf火焰图
性能分析工具:perf火焰图1.安装 perf: yum install -y perf2.https://github.com/brendangregg/FlameGraph 拉取脚本1.采样perf record -C $cpu_num -e cpu-clock -o perf.data -g sleep 10-C 指定cpu-e cpu-clock 指perf record监控的指标为cpu周期-o perf.data 信息收集文件名-g 支持记录函数的调用关系2.用perf sc
2020-11-02 15:14:26
447
原创 Linux 设置cpu亲和力(将进程/线程绑定不同core/cpu)
Linux 设置cpu亲和力(将进程/线程绑定不同core/cpu)进程绑定到CPU#include <sched.h>int sched_setaffinity(pid_t pid, size_t cpusetsize, const cpu_set_t *mask);int sched_getaffinity(pid_t pid, size_t cpusetsize, cpu_set_t *mask);参数pid:进程的id号,如果pid为0,则表示本进程cpusetsiz
2020-11-02 13:54:19
597
原创 linux 编程中忽略SIGPIPE信号
linux 编程中忽略SIGPIPE信号SIGPIPE简单来说,就是客户端程序向服务器端程序发送了消息,然后关闭客户端,服务器端返回消息的时候就会收到内核给的SIGPIPE信号。TCP的全双工信道其实是两条单工信道,client端调用close的时候,虽然本意是关闭两条信道,但是其实只能关闭它发送的那一条单工信道,还是可以接受数据,server端还是可以发送数据,并不知道client端已经完全关闭了。以下为引用:”’对一个已经收到FIN包的socket调用read方法, 如果接收缓冲已空, 则返回
2020-11-02 11:15:07
609
原创 NDK安卓编译链安装
NDK安卓编译链安装网址:https://developer.android.com/ndk/downloads选择Linux平台的,文档截止最新版本android-ndk-r19c-linux-x86_64.zip放置到centos主机上安装mkdir -p /opt/android*tools/unzip -x android-ndk-r19c-linux-x86*64.zip -d /opt/android_tools/在.bashrc添加以下语句NDK=/opt/android*to
2020-11-02 11:08:32
277
原创 wireshark Lua脚本编写
wireshark Lua脚本编写Lua语言是脚本语言,只需要编写相关协议解析的脚本内容,然后由wireshark加载即可(Wireshark自带Lua解析器),wireshark封装丰富的接口给Lua使用,一些有用的docs:https://www.wireshark.org/docs/wsdg_html_chunked/index.html第十章:10. Lua Support in Wireshark第十一章:11. Wireshark’s Lua API Reference Manual
2020-11-02 11:03:36
850
原创 Linux 守护进程启动过程
守护进程启动过程/***************************************************************************** * fork daemon: * (https://github.com/pasce/daemon-skeleton-linux-c/) * (https://nullraum.net/how-to-create-a-daemon-in-c/) * * forking a daemon requires the follow
2020-08-01 14:22:44
191
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人