您的位置:首页 > 其它

2013年2.23 周六

2013-02-23 18:50 267 查看
由于这一周书看的比较少,所以工作中遇到的问题 和 看书看到的新技术就和为一章来写,书看的少的原因:1、近期工作任务比较重,所以很多时间都花在工作上 2、最近笑傲江湖在热播,妹子在看,难免一起看,所以,哈哈 ,这个下周要改

好,回归正题:

遇到的错误和难点:

(1) error:cast from 'char*' to 'int' less precision

这个是用int数值来接受一个char* 类型的变量时报错的,起初用gcc编译的时候,没有问题,后来用g++编译的时候就出问题了。 这个问题很典型,就是32位系统和64位系统的差异。在32位系统中,int为4个字节,char*也为4个字节,所以当两个变量赋值的时候没有问题,但是当移到64位之后,int还是4个字节,但是char*确是有8个字节,这也就导致了标题中的错误。一个兼容跨平台赋值的写法是用long
来接受char*的值,因为对于long和char*来说,在32位和64位上,他们的长度是一样的。所以当我们需要用变量来接收一个指针的时候,最好就是用long 来接收。

(2) linux内核链表的实现

其实上面的一个问题,是在我看linux内核链表实现的一个经典方法的时候发现的。不过那个问题很多人都知道,这里先贴一个linux内核链表的好文章:
http://www.ibm.com/developerworks/cn/linux/kernel/l-chain/index.html 这是一篇讲内核链表很不错的文章。

既然说了 linux内核链表的实现 ,这里就说一个内核中最长使用的方法:

(size_t)((type *)0)->member

1. ( (TYPE *)0 ) 将零转型为TYPE类型指针;

2. ((TYPE *)0)->MEMBER 访问结构中的数据成员;

3. &( ( (TYPE *)0 )->MEMBER )取出数据成员的地址;

4.(size_t)(&(((TYPE*)0)->MEMBER))结果转换类型。巧妙之处在于将0转 换成(TYPE*),结构以内存空间首地址0作为起始地址,则成员地址自然为偏移地址;

也就是说,上述表达式的意义就在于,通过一个结构体类一个成员的地址,可以找到这个结构体的入口地址。linux内核中这种做法很多,这确实是一个很巧妙的方法。

这个可以使用的地方很多,比如实现一个定时器来处理一个类的东西,可以讲一个结构放入类中,然后将这个结构的地址放入一个链表中,当遍历链表的找到这个结构的时候,就可以找出这个类的地址,然后做一些处理,类似的应用还有很多。只要理解这个表达式是求出一个类中成员的偏移量,然后通过成员的地址,找到这个类的入口地主。

(3) redis的接口类hiredis的剖析

这里用剖析肯定不恰当,具体就是做了一些实用接口时需要注意的东西。

操作
返回类型 数 值

set key value REDIS_REPLY_STATUS(5) str

exists key REDIS_REPLY_INTEGER(3) integer

del key REDIS_REPLY_INTEGER(3)
integer

lpush list value REDIS_REPLY_INTEGER(3) integer

get key REDIS_REPLY_STRING(1) str
(这里需要注明一下 及时你的key是一个int 返回值也是REDIS_REPLY_STRING 你需要将这个string转化一下即可)

上述几个列表的意思如下:

当你操作一个redis语句时,该语句返回的类型是什么,如当你输入 set key value redis server 会返回 ‘OK’ 当你get key的时候 如果key存在,redis server 会返回该key的值,这里的'OK'和值 对于hiredis来说被分成了许多类型,‘OK’为status, 值为string, 还有del key 会返回整数,为REDIS_REPLY_INTEGER。

讲这么多的目的只有一个,除非你不用判断redis执行是否成功,否则你肯定要读取一下redis返回的值,当你选择读取返回值的时候,建议要判断一下是否为你想要的返回值,及判断redisReply->type 是否是你想要的,如果不是,就不要读取了,因为肯定是出问题了。

这个可能即使你不判断也不会出问题,但是redis事关存储,如果此数据灰常的重要,相比还是要谨慎的吧。

(4) 一些小常识

还有一些小常识要记录一下:

GDB调试设置运行时参数 set args * * *

strcasecmp(char*, char*) 忽略大小写的判断字符串是否相等

以上便是本周学习的知识,对于下周的工作期望,首先先搞定工作的事情,然后看书的任务也不能落下。还有就是,周末可以的话不用刻意看书,多品读下别人写的博客,多写写一些有意义的代码,效果很更好。

加油!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: