回调函数对于应用开发者涉及不多,但是对于系统级开发者应当是必须了解的,关于回调函数可以简单的认为是自己在程序里写了一个函数但是这个函数需要通过指针方式传递给库进行调用,下面是回调函数的简单示例:
#include <stdio.h>
struct stu{
char name[10];
};
struct stu stu1;
typedef void (*pFun)(void *pstr,int a); //函数指针
int ret=0;
pFun pf;
void dofun()
{
sprintf(stu1.name,"%s","nihao");
pf(&stu1,223);
}
void cb(pFun fun) //回调函数 调用fun1
{
pf= fun;
dofun();
}
void fun1(void *pn,int n) //应用传递函数
{
struct stu *pstu=(struct stu *)pn;
ret = n;
printf("ret = %d name = %s\n",ret,pstu->name);
}
int main()
{
cb(fun1);
return 0;
}
执行结果:
root@ubuntu:/home/xhao/code/lib# ./test
ret = 223 name = nihao
root@ubuntu:/home/xhao/code/lib#
回调函数需要特定场合才会使用,较为好的使用场景可以参考linux 中断号和中断服务函数绑定的回调函数。