简述strcmp/strncmp比较失败的问题

一. 前言   在最近写代码中,遇到了strcmp/strncmp比较失败的问题,由此引出此文的讨论分析。 二. 分析   首先看看strcmp的源码: int strcmp ( const char* src, const char* dst ) { int ret = 0 ; while(...

2019-01-13 17:01:26

阅读数 37

评论数 0

sizeof 和 strlen

一. 前言   大家都知道,sizeof和strlen可以用来获取大小,但是有着不同的用法,这里首先总结区别,最后根据sizeof 和 strlen 的具体事例来分析特别需要注意的事项。 二. sizeof 和 strlen 的特点、区别   二者的区别是老生常谈的话题,也不是本文的重点。这里直接...

2019-01-12 16:20:44

阅读数 23

评论数 0

redis源码解析(九)字典结构体函数介绍之四

1. 简介   本文完成字典结构体剩余函数源码解析。 2. 源码解析   具体源码解析如下: /* 反转比特位 * Function to reverse bits. Algorithm from: * http://graphics.stanford.edu/~seander/b...

2018-11-27 22:10:57

阅读数 47

评论数 0

redis源码解析(八)字典结构体函数介绍之三

1. 简介   本文继上文的基础上,分析剩余的字典相关函数源码。 2. 源码分析 /* 查找并删除 * Search and remove an element. This is an helper function for * dictDelete() and dictUnlink...

2018-11-25 17:39:31

阅读数 101

评论数 0

redis源码解析(七)字典结构体函数介绍之二

1. 简介   字典结构是redis中的核心结构之一,本文继前文基础上介绍更多字典结构体的相关函数。 2.代码解析    /* N步增量重哈希 * Performs N steps of incremental rehashing. Returns 1 if there are sti...

2018-11-23 19:51:26

阅读数 29

评论数 0

redis源码解析(六)字典结构体基本函数介绍

一. 简介   字典结构是redis中的核心结构之一,本文介绍字典结构的基本函数 二. 源码解析   首先是一些有用的宏定义的介绍 /*调用析构函数释放VAL*/ #define dictFreeVal(d, entry) \ if ((d)->t...

2018-11-18 22:18:16

阅读数 24

评论数 0

redis源码解析(五)字典结构体

1. 前言   字典结构是redis中的核心结构之一,主要由dictEntry, dictType, dictht和dict组成,详细源码和介绍如下。 2. 源码分析   1. dictEntry    dictEntry是典型的哈希表项结构:由键值对组成,并且有链表指针next,用于同键...

2018-10-31 22:20:24

阅读数 38

评论数 0

libutp 开源库使用心得

1. 前言   libutp是bittorrent使用的可靠udp库,开源代码在此。该可靠udp最大的特色在于带宽避让:不同于TCP以及其他可靠UDP尽可能抢占带宽资源。因此很适宜使用在下载场景之中以保证其他网络通信流畅。   本文不涉及libutp的源码分析,仅仅对于该库的使用谈一点点经验。...

2018-10-30 22:44:16

阅读数 33

评论数 0

redis源码解析(四)双向链表

  本文分析redis里的双向链表的基础结构以及基础函数 1. 基本结构   redis的双向链表主要实现了以下三个结构体: (1)链表节点,包括两个指针指向前后节点,一个指针指向节点的值 (2)迭代器,用于遍历 (3)链表结构体,包括头、尾、复制释放遍历函数、链表长度。 /* Nod...

2018-10-29 22:40:47

阅读数 27

评论数 0

redis源码解析(三)动态字符串sds高级功能函数

/* Like sdscatprintf() but gets va_list instead of being variadic. */ sds sdscatvprintf(sds s, const char *fmt, va_list ap) { va_list cpy; ...

2018-10-14 00:12:14

阅读数 41

评论数 0

redis源码解析(二)动态字符串sds基本功能函数

1. 简介   本文继上文基础上,分析动态字符串的功能函数。 2. 源码分析   

2018-09-28 21:49:50

阅读数 40

评论数 0

redis源码解析(一)动态字符串sds结构体

1. 简介   Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(...

2018-09-26 23:04:35

阅读数 59

评论数 0

error C2238, error C2143解决方法

  在使用VS编程的时候,偶尔会遇到报错:缺少“;”(在“类型”的前面)问题或者missing ; before type.该类问题的产生原因在于C99之前的C标准里规定只能在函数开头定义变量,而不能在中间位置定义,因而产生各种奇怪的报错。   为了解决该类问题,比较有效地有两种办法:第一种...

2018-09-14 22:17:22

阅读数 289

评论数 0

libevent源码解析(八)hello, world

/* 简单的TCP服务器,监听TCP连接并回复消息 "hello, world" This example program provides a trivial server progr...

2018-09-11 22:19:18

阅读数 38

评论数 0

Proactor模式详解

  proactor结构模式在异步操作完成后触发服务请求的分配和分发 。 1. 举个例子吧   考虑一个需要同时处理多个请求的网络服务程序,比如,一个高效的WEB服务器需要并发的处理来自于不同客户端浏览器的HTTP请求。当一个用户希望从某个URL下载内容时,浏览器和WEB服务器建立连接...

2018-08-27 23:07:31

阅读数 291

评论数 0

Reactor模式详解

  本文翻译至大神的论文,名字叫就叫reactor。   reactor设计模式用于需要并发处理多个客户端的服务器。 1. 举个例子吧   假设我们需要建立一个提供分布式日志服务的事件驱动服务器。客户们使用客户端会向该服务器发送请求记录自己的状态信息,信息包括错误...

2018-08-20 22:15:58

阅读数 61

评论数 0

debug心得(持续更新)

  本文持续更新,记录debug的岁月里的心(keng)得(die)。   1. 写完代码记得多看几次,避免手抖导致的错误。编译器可以检测出一些明显的错误,但是不能检测出一些问题,比如 a[recv] = x; a[send] = y; 写成了: a[recv] ...

2018-08-17 21:58:23

阅读数 169

评论数 0

异步OpenSSL实现HTTPS心得

  本文记录在使用OpenSSL实现异步式HTTPS中的一些心得体会。 1.关于握手 (1)如果没有使用封装库,可以得到套接字描述符;而且非异步系统,允许握手的阻塞,则直接使用API将套接字和OpenSSL绑定,从而完成SSL握手绝对是明智之选,可以省下很多麻烦。 (2)如果封装...

2018-08-06 22:08:21

阅读数 526

评论数 0

libevent源码解析(七)reactor模式及proactor模式

一.前言   在看了一部分源码之后,对reactor模式和proactor有了更详尽的了解。记录在此。网上关于这两个不同的模式有一个很经典的例子:去打印店打印材料人太多了需要排队,老板提供两种服务,一种是排队到你的时候通知你,然后你去选择如何打印,打印什么东西;另一种则是提前告诉老板要如何打印,...

2018-07-28 21:19:04

阅读数 96

评论数 0

libevent源码解析(六)evbuffer读写查找接口函数

一.前言   在前一篇文章里我们给出了evbuffer和evbuffer_chain相关的基础增删之类的接口函数,在本文中我们重点研究evbuffer的读写查找等接口函数的实现原理。 二.查找函数分析 (1)evbuffer_ptr结构体 /** 指向buffer中指定位置,可...

2018-07-28 20:37:57

阅读数 64

评论数 0

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