TokeyRoad

Never underestimate your power to change yourself!


  • 首页

  • 标签

  • 分类

  • 归档

libcurl 编译使用

发表于 2019-07-19 | 分类于 环境配置
字数统计: 3.2k | 阅读时长 ≈ 12

工作的原因,需要使用libcurl库,这里整理一下过程,方便日后食用。(很大一部分来自网络资源,不喜勿喷)

一、引言

cURL、libcurl 还有 curl,他们究竟是什么?

也就是说,我们需要去了解下 libcurl 及其相关的概念。

二、cURL、libcurl 还有 curl 傻傻分不清楚 T_T

可能对于新人来说,就连 cURL、libcurl 和 curl 的概念都是分不清楚的。这不怪我们,确实关于这一点,官方网站都没有说的很清楚,但是在源代码中的 FAQ 文档中却说的非常明白。

1
2
What is cURL? 
cURL is the name of the project. The name is a play on ‘Client for URLs’, originally with URL spelled in uppercase to make it obvious it deals with URLs. The fact ti can also be pronounced ‘see URL’ alse helped, it works as an abbreviation for “Client URL Request Library” or why not the recursive version: “Curl URL Request Library”.

简而言之,cURL 是一个项目的名称。是 Client for URLs、see URL、Client URL Request Library 或者 Curl URL Request Library 的缩写,也就是一个客户端 URL 请求库的项目。

那么什么是 libcurl 呢?

1
2
3
4
5
6
The cURL project produces two products: 
libcurl
A free and easy-to-use client-side URL transfer library.
…
curl
A command line tool for getting or sending files using URL syntax.

上面这段话很清晰的表现出了 cURL 与 libcurl 以及 curl 的关系,也就是说:

阅读全文 »

Redis设计与实现(列表对象)

发表于 2019-07-17 | 分类于 Redis设计与实现
字数统计: 1.1k | 阅读时长 ≈ 4

列表对象的编码可以是 ziplist 或者 linkedlist 。

  • ziplist 编码的列表对象使用压缩列表作为底层实现,每个压缩列表节点(entry)保存了一个列表元素。
  • linkedlist 编码的列表对象使用双端链表作为底层实现,每个双端链表节点(node)都保存了一个字符串对象,而每个字符串对象都保存了一个列表元素。

注:linkedlist编码的列表对象在底层的双端链表结构中包含了多个字符串对象,这种嵌套字符串对象的行为在后续的哈希对象,集合对象,有序集合对象中都会出现,字符串对象是Redis五种类型的对象中唯一的一个会被嵌套的对象。

示例:

1
2
redis> RPUSH numbers 1 "three" 5
(integer) 3

创建出一个列表对象 作为 numbers 键的值。

如果 numbers键的值对象使用的是 ziplist 编码,这个值对象结构如下:

ListObject_1

如果 numbers 键的值对象使用的不是 ziplist 编码,而是 linkedlist 编码,值结构如下:

ListObject_2

下图表示一个包含了字符串值 “three” 的字符串对象:

阅读全文 »

Redis设计与实现(字符串对象)

发表于 2019-07-05 | 分类于 Redis设计与实现
字数统计: 3.1k | 阅读时长 ≈ 11

Redis的键值对都是由对象来表示的,即每次创建一个新的键值对时,我们会至少创建两个对象,一个对象用作键(键对象),另一个用作值(值对象)。

Redis的每一个对象都是由一个 redisObject 结构表示,该结构中和保存数据有关的三个属性分别是 type、encoding、ptr 属性:

1
2
3
4
5
6
7
8
typedef struct redisObject{
//类型
unsigned type:4;
//编码
unsigned encoding:4;
//指向底层实现数据结构的指针
void *ptr;
}robj;

类型

对象的 type 属性记录了对象的类型,属性值对应的常量如下:

类型常量 对象的名称
REDIS_STRING 字符串对象
REDIS_LIST 列表对象
REDIS_HASH 哈希对象
REDIS_SET 集合对象
REDIS_ZSET 有序集合对象

对于Redis数据库保存的键值对,键总是一个字符串对象,而值则可以是字符串对象、列表对象、哈希对象、集合对象或者有序集合对象的其中一种,因此:

  • 当称呼一个数据库键为 “字符串键”时,我们指的是“这个数据库键所对应的值为字符串对象”;

  • 当称呼一个键为“列表键”时,我们指的是“这个数据库键所对应的值为列表对象”。

阅读全文 »

const用法总结

发表于 2019-07-01 | 分类于 C++
字数统计: 1.2k | 阅读时长 ≈ 4

简单总结一下const的用法。

一、const修饰普通类型的变量。

1
2
3
const int a = 7;
int b = a; //正确
a = 8; //错误,const修饰的参数为常量,不可修改

a被 const修饰之后,被编译器识别为一个常量,常量不能被赋值。

简单实例:

1
2
3
4
5
6
7
8
9
10
11
12
#include<iostream>

int main(void){
const int a = 7;
int *p = (int*)&a;
*p = 8;
std::cout << a; //下断点,调试
//这里会输出几呢?
//输出:7
system("pause");
return 0;
}

这个例子中,const 修饰 a,无法直接对a的值进行修改,但是通过*p直接对a地址内的值进行了赋值。

下断点调试时,会发现在 *p = 8 之后,a的值就变为了8。

但是程序最后输出的还是7。

阅读全文 »

Redis设计与实现(压缩列表)

发表于 2019-06-21 | 分类于 Redis设计与实现
字数统计: 2.7k | 阅读时长 ≈ 9

Redis为了节约内存而开发的压缩列表。

由一系列特殊编码的连续内存块组成的顺序型数据结构。

一个压缩列表可以包含任意多个节点(entry),每个节点可以保存一个字节数组或者一个整数值。

压缩列表的构成

包含三个节点的压缩列表,如下图:

ziplist_1

各部分详细说明

属性 类型 长度 用途
zlbytes uint32_t 4 字节 记录整个压缩列表占用的内存字节数:在对压缩列表进行内存重分配,或者计算 zlend 的位置时使用。
zltail uint32_t 4 字节 记录压缩列表表尾节点距离压缩列表的起始地址有多少个字节:通过这个偏移量,程序无须遍历整个压缩列表就可以确定表尾节点的地址。
zllen uint16_t 2 字节 记录了压缩列表包含的节点数量:当这个属性的值小于 UINT16_MAX(65535) 时,这个属性的值就是压缩列表包含节点的数量;当这个值等于 UINT16_MAX 时,节点的真实数量需要遍历整个压缩列表才能计算得出。
entryX 列表节点 不定 压缩列表的各个节点,节点的长度由节点保存的内容决定。
zlend uint8_t 1 字节 特殊值 0xFF (十进制 255),用于标记压缩列表的末端。

列表 zlbytes 属性的值为 0x50 (十进制80),表示压缩列表的总长为 80 字节。

阅读全文 »
1…567…10
Tokey

Tokey

48 日志
9 分类
41 标签
  • C++8
  • Const1
  • Final1
  • HTTP2
  • Redis8
  • SDS1
  • STL4
  • TCP1
  • args1
  • atomic1
  • condition_variable1
  • construct1
  • foreach1
  • git2
  • go4
  • hexo1
  • json1
  • libcurl1
  • mutex1
  • operator1
  • override1
  • priority_queue1
  • shared_ptr1
  • stl1
  • unique_ptr1
  • vector1
  • 关键字2
  • 内存分配1
  • 列表对象1
  • 压缩列表2
  • 堆1
  • 字符串对象1
  • 指针和引用1
  • 敏捷开发1
  • 整数集合1
  • 栈1
  • 环境配置1
  • 缓存1
  • 设计模式1
  • 跳跃表1
  • 链表1
GitHub Google
Links
  • Hacker
本站已运行
© 2021 Tokey
博客全站共45.4k字
苏ICP备-20024031号
访问人数 总访问量 次
0%