2011-06-07
在用vim的时候,有人问搜索xx,能不能高亮搜索到的内容,信口说了句,可能要插件的吧,其实还真没有用过这一功能,不够看起来还是很有用的。
:set hlsearch
2011-06-08
你觉得sizeof('a')的值应该是多少? 也许知道它没有太多意义,但是不要信口就说1,而是等于sizeof(int)。
2011-06-09
我如何用 printf 实现可变的域宽度?就是说, 我想在运行时确定宽度而不是使用 ? printf("%*d", width, x) 就能达到你的要求。
2011-06-10
注意到getchar等的返回值为int,所以如果你使用char(unsigned char)作为返回值,那么在访问非ASCII文档的时候,将会遇到意想不到的麻烦。
- fgetc(), getc() and getchar() return the character read as an unsigned char cast to an int or EOF on end of file or error.
2011-06-13
在研究内核模块.ko的时候,发现不同目录下的两个同名的.ko大小相差10倍,于是看了下它们的区别
一开始认为是进行strip了,但是记得以前直接strip好像符号表就没了,于是查了下,原来是如下命令:
strip的默认选项会去除.symbol节的内容以及.debug节的内容,因此尽量只对可执行文件执行strip而不要对静态库或动态库等目标文件strip。
2011-06-14
C/C 中long型、long long变量以16进制输出。 采用的方式是
- printf(“%016lx”, long);
- printf(“%016llx”, long long);
2011-06-15
通常enum 的存储类型与int相同,也即可以有2^32中取值,可以满足使用。但是注意赋值的范围,否则
可能溢出
2011-06-16
如何判断一个CPU系统的字节序,这是一个很简单的问题:
- int is_big_endian()
-
- {
-
- int test = 0x12345678;
-
- char *p = (char *)&test;
-
-
-
- if(*p = 0x12)
-
- return 1;
-
- else
-
- return 0;
-
- }
在不考虑Middle Endian(这种我没有见过的字节序的情况)的情况下,上面的写法似乎还是有问题的,因为没有考虑int的大小。一个变量的地址总是指向它的低地址,所以一个通用切考虑Middle Endian的情况的函数如下:
- /* little : return 0;
- * big : return 1;
- * else : return -1;
- */
- int xendian()
- {
- unsigned int seed = 0x12345678;
- char *p = (char *)&seed;
- unsigned char uint_len = sizeof(seed);
- /* big endian for higher address is 0x78(high bytes) */
- if(*(p + uint_len - 4) == 0x12
- && *(p + uint_len - 3) == 0x34
- && *(p + uint_len - 2) == 0x56
- && *(p + uint_len - 1) == 0x78
- )
- return 1;
- if(*p == 0x78
- && *(p + 1) == 0x56
- && *(p + 2) == 0x34
- && *(p + 3) == 0x12
- )
- return 0;
- return -1;
- }
2011-06-24
今天发现一个很棒的网站,Linux Kernel Newbies,。非常适合作为分析学习内核的参考。
2011-08-10
对Linux内核的设计模式有所了解,对了解内核,以及写出高质量的内核代码是十分必要的,一篇介绍Linux设计模式的文章http://wangxu.me/blog/p/37很不错。
2011-08-22
最近发现使用word来写资料文档实在是太Ugly,决定从今天开始用Docbook了,一篇介绍它的详细文档。
阅读(2530) | 评论(2) | 转发(2) |