困扰已久的问题, C语言, 链接了第三方的开源库, 库中用了exit(1)如何避免?


困扰已久的问题, C语言, 链接了第三方的开源库, 这个开源库里一些出错处理(比如网络阻塞等情况)在失败时, 会使用exit(1), 还有assert等, 直接终止整个程序了.

我需要他能一直运行的, 出错了重启这个库, 或者至多仅仅这个线程挂掉.

比如: openvpn, 链接的程序, 如果参数配置错误, 直接整个程序崩溃.

有没有什么trick的方法, 把exit() 这种函数直接屏蔽掉.

c 编译 链接

有知识长头发 11 years, 11 months ago

不考虑版权问题的话,改一下源码再用

konovia answered 11 years, 11 months ago

可以玩这么一个trick,写一个脚本给开源库每个头文件插入下面一段代码


 #include "custom_lib_func.h"

下面是 custom_lib_func.h 的代码


 #ifndef CUSTOM_LIB_FUNC_H
#define CUSTOM_LIB_FUNC_H

#define exit(x) custom_exit(x)

void custom_exit(int flag)
{
    //Your custom implementation
}

#endif

这样在预处理的时候会把exit(1)替换成你自定义的custom_exit(1)。

网路乞讨专家 answered 11 years, 11 months ago

再开个进程?

迎风射三丈 answered 11 years, 11 months ago

Your Answer