网工干货知识

超全学习笔记
当前位置:首页 > 干货知识

在分层架构中运用回调机制

更新时间:2026年03月27日   作者:spoto   标签(Tag):
从网络的OSI模型到操作系统,任何日常使用的项目都基于分层架构来构建。 有没有想过,上层与下层之间的抽象关系究竟是如何产生的呢?其实,这一切都是因为回调机制的作用。 总的来说,上层组件的存在是为了让系统更加简单、易于使用(比如软件开发工具包)。而底层组件则负责与网络进行交互(对于基于网络的项目来说),或者执行系统级操作(对于基于操作系统的项目来说)。 因此,我们可以直接从上层源文件中调用定义在较低层中的函数,并将数据通过函数的参数传递下去。 但是,我们不能仅仅从下层调用上层的函数,因为那样会导致循环依赖的问题。 所以,这里就涉及到“回调”这个概念了。回调函数也就是说,这是一种将函数作为参数传递给另一个函数,之后再通过该参数来调用该函数的方式。upperlayer.c以及lowerlayer.c它们分别作为上层和下层的源文件。lowerlayer.h这是头文件的内容。lowerlayer.c在……中upperlayer.c首先,是函数的引用。通知观察者()被传递给……lowerlayer.c作为论据/依据register_callback()这被称为在底层进行回调注册。现在,底层已经知道了该函数的引用信息了。通知观察者()。这register_callback()“function”只是将一个函数的引用存储在一个全局函数指针中而已。g_notify_ob这样,文件中的任何函数都可以被调用。通知观察者()现在,每当下层需要向上层传递数据时(或者需要发送某种通知时),它只需调用相应的函数即可。通知观察者()由召唤者所决定/由呼唤所引发g_notify_ob()以下是 upperlayer.c 文件的内容。
#include<stdio.h>#include“lowerlayer.h”无效/无意义通知观察者(){printf(由回调函数调用的函数\n");}整数主要/核心(){// 调用register_callback函数// 将notify_observer的地址作为参数传递注册回调函数(通知观察者);低阶函数();}
这是lowerlayer.h文件。其中被高亮显示的那一行代码,只是为了表示那个回调函数的原型而已。该回调函数的原型基本结构如下:
typedef <Function return type> (*<Name of the function pointer type>)
                      (<Type of Function arguments separated by comma>)
C
// 以下是该函数的原型定义// 实际上,这些参数是通过引用方式传递的。typedef无效/无意义(*通知对象)(无效/无意义);无效/无意义注册回调函数(通知对象);无效/无意义低层次函数();
现在,这是lowerlayer.c文件的内容。
#include“lowerlayer.h”#define NULL 0通知对象g_notify_ob;// 回调函数无效/无意义低阶函数(){// 再次调用 notify_observer 以进行通知g_notify_ob();}// 回调函数注册无效/无意义注册回调函数(通知对象乐趣/娱乐){g_notify_ob=乐趣/娱乐;}
如果我们像这样编译并运行这些文件,那么输出结果将会是这样的。
$gcc -c upperlayer.c
$gcc -c lowerlayer.c
$gcc -o exe upperlayer.o lowerlayer.o
$./exe

输出结果: Function called by callback 
              马上抢免费试听资格
意向课程:*必选
姓名:*必填
联系方式:*必填
QQ:
思博SPOTO在线咨询

相关资讯

即刻预约

免费试听-咨询课程-获取免费资料