码迷,mamicode.com
首页 > 其他好文 > 详细

Redis自定义动态字符串(sds)模块(二)

时间:2016-03-13 23:46:31      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:

sds模块的具体实现:

1、sdsnewlen 根据参数生成一个sds字符串

 1 sds sdsnewlen(const void *init, size_t initlen) 
 2 {
 3     struct sdshdr *sh;
 4   //如果初始化的内容为NULL,则生成一个内容只有一个\0的串,但是长度不会变,还是传入的长度。zmalloc和zcalloc的功能一样,这个地方为啥还要调用不同的呢。
 5     if (init) {
 6         sh = zmalloc(sizeof(struct sdshdr)+initlen+1);
 7     } else {
 8         sh = zcalloc(sizeof(struct sdshdr)+initlen+1);
 9     }
10     if (sh == NULL) return NULL;//申请失败返回NULL
11     sh->len = initlen;//初始化长度为传入值。
12     sh->free = 0;//设定剩余长度为0
13     if (initlen && init)
14         memcpy(sh->buf, init, initlen);//初始化值
15     sh->buf[initlen] = \0;填写最后的结尾符
16     return (char*)sh->buf;
17 }

未完待续。。。

Redis自定义动态字符串(sds)模块(二)

标签:

原文地址:http://www.cnblogs.com/likui360/p/5274041.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!