我正在用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。对不起,我的英语。
最佳答案
试图保护您免受加载到地址空间中的错误代码的侵害,这是一场失败的战斗。这些插件可能造成真正的损害,您将永远无法恢复。
要么接受有bug的插件会使您的应用程序崩溃的事实,要么您必须按照建议在单独的过程中隔离插件。但是,您只需要调用一次fork,就可以在加载插件时放慢速度。真正的工作将是使用某种形式的IPC与您的应用中的插件进行通信-管道可能是合适的。
关于c++ - C++动态库segfault,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6297006/