- 博客(95)
- 资源 (13)
- 收藏
- 关注
原创 使用zlib实现gzip压缩
读写文件#include <stdio.h>#include <string.h>#include <unistd.h>#include <zlib.h>int main(){ int err; int len = 11; gzFile file; z_off_t pos; unsigned char uncompr[128] = {0}; int uncomprLen = 128; .
2021-03-23 18:39:13
2188
原创 libevent 使用实现http 服务
单线程#include <stdio.h>#include <stdlib.h>#include <string.h> //for strcat#include <unistd.h> //for getopt, fork// for struct evkeyvalq#include <event.h>#include <sys/queue.h>// for http//#include <evhttp.h
2021-03-21 18:45:01
1361
原创 gnutls_handshake() failed: Error in the pull function
执行git submodule update --init --recursive github上拉取工程子模块,出现如下错误尝试各种解决方法没有解决:1、配置代理(尝试无效)设置代理git config --global http.https://github.com.proxy http://127.0.0.1:7890git config --global https.https://github.com.proxy https://127.0.0.1:7890#7890为..
2021-03-19 11:57:06
9269
3
原创 kafka学习--初识kafka
一、kafka简介Kafka是一个高吞吐量、分布式的发布—订阅消息系统。目前kafka已经定位为一个分布式流式处理平台。kafka主要扮演如下三大“角色”消息系统:Kafka和传统的消息系统(也称为消息中间件)都具备系统解耦、冗余存储、流量削峰、缓冲、异步通信、扩展性、可恢复性等功能。于此同时Kafka还提供了大多数系统难以实现的消息顺序性保障及回溯消费的功能。 存储系统:Kafka把消息持久化到磁盘,降低了数据丢失的风险。得益于Kafka的持久化功能和多副本机制,我们可以把Kafka作为长期
2020-11-08 15:59:59
291
原创 Hyperscan 安装
源码下载Ragel:http://www.colm.net/files/ragel/ragel-6.9.tar.gzboost :http://downloads.sourceforge.net/project/boost/boost/1.60.0/boost_1_60_0.tar.gzhyperscan :https://download.youkuaiyun.com/download/u014608280/12745509第3方依赖库¶依赖项 版本 说明 CMake ...
2020-08-25 11:53:25
3097
2
原创 libpcap使用
捕获数据包操作/*pcap_test.c编译方式:gcc pcap_test.c -o pcap_test -lpcap -lpthread*/#include <stdio.h>#include <stdlib.h>#include <pcap.h>#include <pthread.h>#define SNAP_LEN 65535pcap_t *handle;pcap_dumper_t* out_pcap;/*函数名称.
2020-08-07 11:13:45
1183
原创 DPDK CAS(compare and set)操作
rte_atomic32_cmpset()称为CAS(compare and set)操作,是DPDK无锁队列实现的关键函数,代码如下:static inline intrte_atomic32_cmpset(volatile uint32_t *dst, uint32_t exp, uint32_t src){uint8_t res; asm volatile( "lock;" "cmpxchgl %[src], %[dst];" "sete %[res];" :[res] "=a.
2020-07-27 16:04:25
909
转载 Gcc内置原子操作__sync_系列函数简述及例程
Gcc 4.1.2版本之后,对X86或X86_64支持内置原子操作。就是说,不需要引入第三方库(如pthread)的锁保护,即可对1、2、4、8字节的数值或指针类型,进行原子加/减/与/或/异或等操作。有了这套内置原子操作函数,写程序方便很多。老宋根据Gcc手册中《Using the GNU Compiler Collection (GCC)》章节内容,将__sync_系列17个函数声明整理简化如下:type __sync_fetch_and_add (type *ptr, type value, ..
2020-07-27 14:39:51
961
原创 sqlite3 简单操作
#include <stdio.h>#include <stdlib.h>#include "sqlite3.h"/*sqlite3_exec 执行sql对应的功能命令,然后将结果传递给回调函数 pv:由sqlite3_exec传递的初始化参数 argc:表头的列数 col:表头的名字数组指针 argv:表头的数据数组指针*/static int callback(void *pv, int argc, char **argv, char *.
2020-07-13 14:52:39
315
原创 curl使用
curl 是常用的命令行工具,用来请求 Web 服务器。它的名字就是客户端(client)的 URL 工具的意思。curl https://www.baidu.com<!DOCTYPE html><!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compat
2020-06-30 14:54:28
2417
原创 redis 源码分析--整数集合
简介整数集合是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素数量不多时,Redis就会使用整数集合作为集合键的底层实现。实现typedef struct intset { // 编码方式 uint32_t encoding; // 集合包含的元素数量 uint32_t length; // 保存元素的数组 ...
2020-04-18 17:31:42
207
原创 进程的各种ID
pid(进程ID) UNIX进程总是会分配一个号码用于在其命名空间中唯一的标识他们。该号码被称为进程ID号,简称PID。用fork或者clone产生的每个进程都由内核自动的分配一个新的唯一的PID值。#include <sys/types.h>#include <unistd.h>pid_t getpid( void ); ppid(父进程ID) ...
2020-04-14 15:43:42
2067
原创 缓冲与非缓冲I/O、直接与非直接I/O、阻塞与非阻塞I/O、同步与异步I/O
文件读写方式的各种差异,导致I/O的分类多种多样。最常见的有缓冲与非缓冲I/O、直接与非直接I/O、阻塞与非阻塞I/O、同步与异步I/O。根据是否利用标准库缓存,可以把文件I/O分为缓冲I/O与非缓冲I/O。 缓冲I/O,是指利用标准库缓存来加速文件的访问,而标准库内部再通过系统调度访问文件。 非缓冲I/O,是指直接通过系统调用来访问文件,不再经过标准库缓存。 这里所说的...
2020-04-13 16:55:16
1022
原创 多线程编程笔记
1、线程概念线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程...
2020-04-10 17:01:09
288
原创 redis 源码分析--跳跃表
简介跳跃表(skiplist)是一种有序的数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。跳跃表支持平均O(logN)、最坏O(N)复杂度的节点查找,还可以通过顺序性操作来批量处理节点。Redis只在两个地方用到了跳跃表,一个是实现有序集合键,另一个是在集群节点中用作内部数据结构。定义typedef struct redisObject {...
2020-04-08 14:57:10
248
原创 redis 源码分析--字典
简介 字典,又称为符号表(symbol table)、关联数组(associative array)或者映射(map),是一种用于保存键值对(key-value pair)的抽象数据结构。 Redis 的字典使用哈希表作为底层实现,一个哈希表里面可以有多个哈希表节点,而每个哈希表节点就保存了字典中的一个键值对。实现/* * 哈希表节点 */typedef struct...
2020-04-03 11:06:44
209
原创 linux 网络编程各种坑
TCP/IP协议相关1、延时ack当协议栈接受到TCP数据时,并不一定会立刻发送ACK响应,而是倾向于等待一个超时或者满足特殊条件时再发送。对于Linux实现,这些特殊条件如下:1)收到的数据已经超过了 full frame size2)或者处于快速回复模式3)或者出现了乱序的包4)或者接收窗口的数据足够多如果接收方有数据回写,则ACK也会搭车一起发送。当以上条件都...
2020-04-02 14:25:53
1005
原创 redis 源码分析--链表
简介 链表在Redis中的应用非常广泛,比如列表键的底层实现之一就是链表。当一个列表键包含了数量表较多的元素,又或列表中包含的元素都是比较长的字符串时,Redis就会用链表作为列表键的底层实现。...
2020-04-01 16:11:33
182
原创 redis 源码分析--字符串
简介Redis虽然是由C语言实现的,但是Redis没有直接使用C语言传统的字符串表示,而是构建了一种名为简单动态字符串(simple dynamic string, SDS) 的抽象类型,并将SDS用作Redis的默认字符串表示。SDS 定义sds 和 sdshdr 在sds.h头文件中定义是这样的/* * 最大预分配长度 */#define SDS_MAX_PREALLO...
2020-03-08 23:36:55
190
原创 一个简单的内存池
在研究nginx源码,以下代码完全摘抄自nginx内存池源码。mem_pool.h#ifndef _MEM_POOL_H#define _MEM_POOL_Htypedef unsigned char u_char;typedef unsigned int u_int;/*计算宏mem_align(1, 64)=64,只要输入d<64,则结果总是64,如...
2020-03-08 15:14:36
338
原创 发生段错误后程序不崩溃
一个段错误的例子:#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){ char *tmp = NULL; strcpy(tmp, "hello"); return 0;}执行结果加上段错误处理函数:#include <stdi...
2020-01-13 17:46:24
1263
原创 git checkout 文件 Permission denied错误
git 切换来切换去,出现一个文件被修改,然后执行git checkout出现如下问题,环境是本地文件挂载到服务器上的1、查看权限发现没有问题。2、git 上执行rm 删除,没有报错但是查看文件还是存在,执行git status 还是老样子报文件被修改。3、在本地上删除报需要管理员权限错误,shift + delete 强制删除,执行git status 依然是错误,再去本地看文...
2019-12-11 18:01:55
3096
转载 Linux vmstat命令详解
vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监控。是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。别 我们知道,直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成,而内存是有限的,这样就引出了物理内存与虚拟内存的概念。 物理内存...
2019-12-09 10:47:26
154
转载 中国支付清算系统简介
|中国的支付清算有两套体系 当你去ATM取钱时,用的是央行的CNAPS(中国现代化支付清算系统) 当你用支付宝买买买时,用的是第三方支付的清算系统 这里先介绍第一部分:CNAPS|当你在ATM取钱时,银行都做了什么?我们先拿一个ATM取钱的例子来说明跨行业务的过程。假如你拿着一张工行卡去建行的ATM取了100元,这时候就发生了跨行业务。这个过程非常简单:...
2019-12-04 10:45:38
6292
转载 MYSQL 锁
什么是锁?锁是数据库系统区别于文件系统的一个关键特性。锁机制用于管理对共享资源的并发访问,提供数据的完整性和一致性。MySQL 不同的存储引擎支持不同的锁机制,MyISAM 和MEMORY 存储引擎采用的是表级锁(talbe-level locking);BDB存储引擎采用的是页面锁(page-level locking),但是也支持表级锁,InnoDB存储引擎即支持行级锁(row-...
2019-09-09 22:37:48
183
转载 写缓冲(change buffer)
简单回顾一下:(1)MySQL数据存储包含内存与磁盘两个部分;(2)内存缓冲池(buffer pool)以页为单位,缓存最热的数据页(data page)与索引页(index page);(3)InnoDB以变种LRU算法管理缓冲池,并能够解决“预读失效”与“缓冲池污染”的问题;画外音:细节详见《缓冲池(buffer pool)》。毫无疑问,对于读请求,缓冲池能够减少...
2019-09-09 14:11:51
1080
2
转载 缓冲池(buffer pool)
应用系统分层架构,为了加速数据访问,会把最常访问的数据,放在缓存(cache)里,避免每次都去访问数据库。操作系统,会有缓冲池(buffer pool)机制,避免每次访问磁盘,以加速数据的访问。MySQL作为一个存储系统,同样具有缓冲池(buffer pool)机制,以避免每次查询数据都进行磁盘IO。今天,和大家聊一聊InnoDB的缓冲池。InnoDB的缓冲池缓存什么?有什么用...
2019-09-09 14:07:46
781
原创 mysql事务
一、什么是事务数据库事务,是指作为单个逻辑工作单元执行的一系列操作,要么完全执行,要么全部不执行。事务的实现在数据库的引擎层,MyISAM不支持事务。二、事务的特性(ACID)原子性(atomicity) 一致性(consistency) 隔离性(isolation) 持久性(durability)1、原子性 原子性指整个数据库事务是不可分割的工作单位。只有使事务中所有...
2019-09-07 16:27:17
277
原创 InnoDB存储引擎 --存储结构
表结构定义文件 MySQL数据的存储是根据表进行的,每个表都会有与之对应的文件。但不论表采用何种存储引擎,MySQL都有一个以frm为后缀名的文件,这个文件记录了该表的表结构定义。frm还用来存放视图的定义,如用户创建了一个v_a视图,那么对应的会产生一个v_a.frm文件,用来记录视图的定义。查看MySQL 数据文件存储位置的方法: 表空间文件 (InnoDB)...
2019-08-14 09:55:02
469
原创 NFS协议
NFS文件系统NFS(Network File System,网络文件系统)最初由SUN公司于20世纪80年代设计,一种典型的基于网络的文件系统。它提供了在网络内各个设备对于共享文件操作的方式,如某一FAT文件系统物理上是存放在其他设备上的,某设备可以通过挂载这个FAT文件系统,使该系统就像是存放在本地设备上的。用户可以不加区别地对本地和非本地文件进行操作。在TCP/IP标准协议集的基础上,N...
2019-08-13 15:59:21
5519
原创 Python3-基本数据类型
整数定义:a = 125。 python 可以处理“任意”大小的整数包括负数。 支持二进制、八进制、十进制、十六进制通过前缀来区分:前缀 例子 进制 0b或者0B a = 0b1010 2 0o或者0O a = 0o12 8 无 a = 10 10 0x或者0X a = 0xa 16 浮点数定义的三种...
2019-08-03 23:05:09
143
原创 mysql 索引相关(InnoDB存储引擎)
索引的常见模型索引的出现是为了提高查询效率,但是实现索引的方式却有很多种,所以这里也就引入了索引模型的概念。可以用于提高读写效率的数据结构很多,介绍三种常见、也比较简单的数据结构,它们分别是哈希表、有序数组和搜索树。哈希表 哈希表是一种以键-值(key-value)存储数据的结构,我们只要输入待查找的值即key,就可以找到其对应的值即Value。哈希的思路很简单,把值放在...
2019-08-03 20:36:58
308
转载 C语言调用python脚本
.Python脚本,名称为py_add.py def add(a=1,b=1): print('Function of python called!') print('a = ',a) print('b = ',b) print('a + b = ',a+b)C语言代码callpython.c#include <Python.h>#i...
2019-07-24 16:10:35
4434
转载 Valgrind使用简介
Valgrind 概述体系结构Valgrind是一套Linux下,开放源代码(GPL V2)的仿真调试工具的集合。Valgrind由内核(core)以及基于内核的其他调试工具组成。内核类似于一个框架(framework),它模拟了一个CPU环境,并提供服务给其他工具;而其他工具则类似于插件 (plug-in),利用内核提供的服务完成各种特定的内存调试任务。Valgrind的体系结构如下图所...
2019-06-28 10:18:25
4958
1
转载 SMTP_POP3与MIME协议整理
邮件协议整理写在前面最开始的邮件传输是根据SMTP实现的,但由于历史原因,Internet上的很多网关不能正确传输8 bit内码的字符,比如汉字等。所以出现了对邮件内容编码的需要。这样,在邮件协议中除了smtp、pop外,又增加了与编码相关的MIME。概括地说,smtp、pop与邮件的接收、发送过程相关,这两者负责邮件的传输;而MIME与邮件内容(这里,邮件内容包括发件人信息、收件人/...
2019-04-18 15:44:07
5857
转载 /proc/cpuinfo 详解
LinuxCPU数量判断,通过/proc/cpuinfo.相同physical id :决定一个物理处理器如果“siblings”和“cpu cores”一致,则说明不支持超线程,或者超线程未打开。如果“siblings”是“cpu cores”的两倍,则说明支持超线程,并且超线程已打开。其实只要#include <unistd.h>long num =...
2019-03-18 17:00:42
4248
转载 IMAP协议详解
概述IMAP4(Internet Message Access Protocol 4) 即 交互式数据消息访问协议第四个版本IMAP协议是由斯坦福大学的Mark Crispin教授在1986年开发的,后期版本是华盛顿州立大学进行开发的,IMAP4是TCP/IP协议族中的一员,现在的版本是“IMAP第四版第一次修订版”(IMAP4rev1)IMAP4协议与POP3协议一样也...
2019-03-13 17:11:38
33640
2
原创 ftp协议详解
一、Windows下搭建FTP服务器,抓取FTP数据包1、2、3、4、5、IP地址填写自己本机的IP地址6、勾选了匿名就不用输入密码了7、8、抓包二、linux下FTP抓包先检查有没有安装FTP没有的话执行下面命令安装yum install vsftpd -y通过/etc/vsftpd/vsftpd.conf 文...
2019-03-02 11:13:20
8328
redis-3.0.0源码.zip
2020-03-08
C和指针(中文)
2019-03-01
深入理解MySQL核心技术(第二版)
2018-06-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人