我正在用c ++编写网络应用程序,我想启用插件,但我不知道该怎么做,以保护我的应用程序免受像segfault这样的错误。例如: 我有界面:
class IPlugin{
public:
IPlugin();
virtual ~IPlugin();
virtual void callPlugin() = 0;
}
有人会写动态库:
class Plugin : public IPlugin{
public:
Plugin();
virtual ~Plugin();
virtual void callPlugin();
}
void Plugin::callPlugin(){
int* a = NULL;
*a = 5;
}
在我的应用程序中调用此函数将以终止所有内容结束。我知道我可以使用fork(),但是插件中的函数会很短并且会被多次使用,所以我认为fork()太慢了。有什么想法吗?
PS。对不起我的英语。
答案 0 :(得分:5)
这是一场失败的战斗,试图保护您免受加载到您的地址空间的错误代码。这些插件可以造成真正的伤害,你永远无法恢复。
要么接受一个错误的插件会让你的应用程序失效,或者你必须按照你的建议在一个单独的进程中隔离插件这一事实。但是你只需要调用一次fork,当你加载插件时,不要担心它很慢。真正的工作是使用某种形式的IPC从您的应用程序与插件进行通信 - 管道可能是合适的。