在C中注册回调函数

时间:2012-05-31 15:33:48

标签: c callback kernel space

我是一些Linux内核空间代码。我希望用户空间中的应用程序能够通过调用内核空间代码中的函数并传递该回调函数的地址来在内核空间代码中注册回调函数。然后,内核空间代码将在以后运行时执行回调函数。我相信内核空间代码应该是这样的:

typedef void (*callback_func) (void);
callback_func callback;

static void registerCallBack(callback_func funct){callback = funct;}

//another kernel space method
funct();

但是,我对正确的typedef有点不确定,以及它是否能正常工作。任何人都可以确认这个功能或在这个领域提供任何建议吗?我现在无法测试这个,因为我正在等待剩余的内核空间代码完成。

3 个答案:

答案 0 :(得分:1)

您的typedef看起来不错,但我建议将callback_func重命名为callback_func_t,否则它看起来像变量而不是类型。

答案 1 :(得分:1)

您无法直接从内核调用用户空间函数。一种可能的解决方案是使用signals。从内核代码中,您可以向给定进程发送信号。然后信号处理程序将作为一种回调函数工作。

答案 2 :(得分:0)

如果您只是想从内核运行用户空间应用程序,那么this将详细介绍如何执行此操作。