c 菜鸟从Redis源码学习C语言之Redis双向链表

双向链接是C语言中常用的一种数据结构,是链表的一种。链表由若干个结点组成。

相关文件:adlist.h,adlist.c

其结构如下:

一、双向链接相关结构体的声明

1、链表结点

组成链表的基本组成单元(可以称为链表元素)

  1. typedef struct listNode {
  2. struct listNode *prev;
  3. struct listNode *next;
  4. void *va

c 菜鸟从Redis源码学习C语言之Redis简单动态字符串

在Redis中,除了一些用到字符串字面量的情况外,其他都是通过简单动态字符串结构体来代替c字符串,当然是为了更加方便的操作Redis字符串,比如Redis中的键的名称存储使用的就是Redis字符串。

一、sds字符串声明

1、声明sds字符串:即一个c字符串指针
  1. typedef char *sds;
  • typedef是用来定义类型别名的,其用法是:typedef 原类型 自定义类型

上面的语句也可以是

c 菜鸟从Redis源码学习C语言

Redis是一款高效的内存缓存软件,以支持多种数据类型、支持持久化以及高性能著称,因此通过它的源码,来学习C语言是一个不错的主意。以C语言菜鸟身份,以Redis3.0.7为主版本对Redis进行浅显的原理分析。

虽然当前Redis的最新版本为Redis3.2.x系列,但相对而言,市面上使用较多的还是Redis3.0.x系列,而且Redis3.0.x系列的代码更加易懂,因此,采用Redis3.0.7

OpenResty 大话lua与c语言的桥梁之luaJIT的ffi库(下)

luaJIT的FFI库有很多有用的函数,除了上文介绍的ffi.cdef,ffi.C和ffi.load外,还有以下常用的函数,听我一一道来

1、ffi.new

  • 功能:判断一个cdata对象

  • 用法:ffi.new(ct, elem?, init?)

  • 参数:

    • ct为C语言的数据类型,可以是基本数据类型,也可以是结构体等复合类型,当然也包括一些类型别名,如uin64_t
    • elem为元素个数,一般用于数组中

OpenResty 大话lua与c语言的桥梁之luaJIT的ffi库(上)

FFI库是lua与C语言的桥梁,可以在lua代码中直接使用C函数或者C数据结构,而不需要通过lua的C扩展来实现,确实很方便。

一、使用FFI库的步骤

  • 1、加载FFI模块

  • 2、使用ffi.cdef声明C函数或者C的数据结构

  • 3、使用ffi模块其他函数

二、FFI库的相关词汇

  • cdecl:一个抽象的C类型定义(其实是一个lua字符串)
  • ctype:一个C类型对象
  • cdata:一个C数据对象
  • ct:一个C