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

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

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

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

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

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


再开个进程?


可以玩这么一个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)。


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


两个思路:
1、编译时屏蔽,对exit函数和assert函数打桩

2、运行时屏蔽,exit(1)没辙,assert函数可以考虑修改SIGABRT信号的默认处理函数。

【热门文章】
【热门文章】