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