1.开发工程项目时,普遍都采用了分层思想,即底层和应用层分离开来,使得各个功能模块之间一目了然,但之间又紧密关联。
分层后,应用层自上而下形成一个单向一来操作。好处就是某模块的依赖者可以轻易更换。
2.回调函数的基底还是函数指针,而函数指针就是指针指向了一个函数,从而去调用该模块。
Linux在处理信号时,有一个信号处理函数,
函数指针:void(*)(int):函数参数是int类型,返回值是void类型。
typedef关键字为函数指针起了个别名叫 sighandler_t ,作为另一个函数参数传递过去,同时返回值也是函数指针。
下面举例一个回调函数实例:
//file.c------------------------
typedef int(*callback)(int);
void registerCallback(callback p);
int run(void);
callback file_op;//实例化对象
void registerCallback(callback p)//注册回调
{
file_op=p;
}
int run(void)
{
int fd=-1;
fd = open("./test.txt",O_RDWR | O_CREAT | O_TRUNC, 0666);
if(fd == -1)
{
return -1;
}
int ret=file_op(fd);
printf(">>>main:ret=%d\r\n",ret);
}
//main.c--------------------
int print_fd(int fd)
{
char buf[50] = "hello world 666";
printf(">>>file:fd=%d\r\n", fd);
write(fd, buf, strlen(buf));
return 1024;
}
int main()
{
registerCallback(print_fd);
run();
}
运行结果:
>>>file:fd=3
>>>main:ret=1024
file中的fd可以传到应用层,同时应用层的值也可以通过返回值传递下去。