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

发布于 2022-08-31 20:17:40 字数 232 浏览 22 评论 0

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

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

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

流绪微梦 2022-09-07 20:17:40

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

姐不稀罕 2022-09-07 20:17:40

再开个进程?

山有枢 2022-09-07 20:17:40

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

陈年往事 2022-09-07 20:17:40

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文