摘要:
本文介绍了如何用信号来调试一个程序。众所周知,在Linux编程中,经常会遇到程序segment fault或其他类似的错误,这些错误比较难调试,本文就介绍了用信号来调试这种错误的方法。 当一个程序访问一个未分配内存的地址时或其他情况时,会产生segment fault错误,此时程序会产生一个SIGSEGV的信号,所以,我们的程序可以捕获这个信号,并打印出是哪条指令导致了该错误,及产生该错误时CPU各寄存器的值,从而定位出问题所在。 本文举了两个很好的例子,一个是对SIGILL信号的处理,比如,当一个应用程序执行了一个不被允许的操作(比如用汇编执行保存/恢复CPU特权 寄存器的指令),这种操作在 阅读全文
摘要:
Mesa is a 3-D graphics library with an API which is very similar to that of OpenGL. To the extent that Mesa utilizes the OpenGL command syntax or state machine, it is being used with authorization from SGI. While Mesa is not a licensed OpenGL implementation, it is currently being tested with the Ope 阅读全文
摘要:
1. 首先在VTK的网站:http://www.vtk.org 上可以下载到VTK的源码(VTK不提供Precompiled binary版本,所以,VTK的安装都必须要手动自己编译),Down下来之后解开。VTK的网站上还有VTK Data下载,这是VTK Example程序运行时所需要的数据文件,如果我们想在安装完VTK后做一些演示和测试,那么就需要下载这个包。我的意见是不用下载了,VTK安装完成 后,我们用VTK网站上提供的两个Example Code,自己编译运行一下,就可以知道VTK有没有安装成功了。 2. 解开包,看到根目录下有一个README.html文件,这就是安装文档,基本上 阅读全文
摘要:
众所周知,通过使用条件编译,可以让我们的C代码支持不同的平台。但是在代码中大量运用#ifdef, #endif这样的预处理指令显然是不妥的,因为这些代码分散在所有的代码中,非常难维护。将来如果要再添加一个平台的支持,要在所有代码中search 这些预处理指令。所以,很容易想到的一种改良方法是专门做一个.h文件来做这个事情,比如platform_specific.h: #ifdef WIN32 inline function1() { ...... } inline function2() { ...... } #endif #ifdef LINUX inline function1() { . 阅读全文
摘要:
我们都知道,可以用atexit来注册一个我们自己写的函数作为exit函数,也就是说,在程序退出的时候,会调用到我们的这个自定义exit函数。问题是: 在Linux下终结一个C程序,最普遍的有两种做法: 1、在main函数中调用return 2、在任何地方调用 "exit" system call 试验证明,这两种方法都会触发我们自定义的exit函数,写的测试程序如下: Code: Select all#include "apue.h"static void my_exit(void);int main(void){ if (atexit(my_exit) 阅读全文
摘要:
Using GNU C __attribute__ reading notes 1. 本文讲述GNU编译器的一个特性-__attribute__,这个宏是一个编译器指令,我们在代码中通过定义这个东西,可以inform编译器我们代码 的一些逻辑,从而在编译器避免一些错误,在运行期提高性能。__attribute__在很多代码中都有应用,非常实用。包括我们在看一些老外写的比较成 熟的代码的时候,都能看到这个东西。 2. __attribute__ format ,这个东西能告知编译器,我们的代码在处理printf,scanf这样变参数的函数的时候,哪个参数是format string,哪个参数是参 阅读全文
摘要:
crypt函数用来加密,目前Linux平台上加密的方法大致有MD5, DES, 3 DES 在RedHat平台上MD5和DES用的多一些。crypt函数的原形是: char *crypt(const char *key, const char *salt); key就是我们要传入的明文,salt是我们指定用来加密的密钥,返回值就是加密后的密文。 关键就是这个密钥salt,这里通过我们的实验,发现: (1)salt这个字符串如果以$1$开头,以$结尾,那么这表示让crypt用MD5的方式加密,加密后出来的密文格式就是 $1$...$<密文正文> ,夹在$1$和$之间的字符串就是我们指 阅读全文
摘要:
据说每个人都回错一回的声明。 参考C++ Primer 4th pdf版的164页。typedef、指针、const这些东西揉在一起是非常复杂的,值得推敲。 cstr的类型应该是:string *const -- 指向string的一个const指针 阅读全文