c - 什么是 stub 例程?

标签 c terminology stub routines

关于 C 什么是 stub 例程?另外一个例子也将不胜感激。

最佳答案

stub 例程可以是(至少)两件事之一。


首先,它可以是一个占位符例程,您可以快速开发它来测试更高级别的例程,以便稍后替换真实版本。这通常与自上而下的开发一起使用(首先对较高级别进行编码,然后逐步深入到更详细的内容)并且可以像以下一样简单:

int getCount (void) { return 7; } // just return fixed value for testing.

或稍微复杂一点:

// Cycle through values for some variety.
int getCount (void) {
    static int retvals[] = {2,7,1,8,2,8,1,8,2,8,4,5,9};
    static int pos = -1;
    pos = (pos + 1) % (sizeof (retvals) / sizeof (*retvals));
    return retvals[pos];
}

当然,一旦 stub 变得足够复杂,您也可以只实现真实的东西:-)


其次,它通常用于远程过程调用 (RPC) 环境。 stub 用于在一端编码数据并将其传送到另一端的服务器。

RPC 需要为客户端和服务器创建 stub 函数。它与 C 中的函数原型(prototype)非常相似,但最终结果略有不同,例如:

+----------------+
| Client         |
|  +----------+  |                   +---------------+
|  |  caller  |  |                   | Server        |
|  |----------|  |                   |  +----------+ |
|  | stub_cli |---- (over the wire) --->| stub_svr | |
|  +----------+  |                   |  |----------| |
+----------------+                   |  | function | |
                                     |  +----------+ |
                                     +---------------+

在此示例中,调用者不是在同一程序中调用 function,而是调用客户端 stub 函数(与 function 具有相同的原型(prototype)) >),它负责打包信息并将其传输到另一个进程。

这可以是同一台机器或不同的机器,这并不重要 - RPC 的优势之一是能够随意移动服务器。

在服务器中,有一个“监听器”进程将接收该信息并将其传递给服务器。服务器的 stub 接收信息,将其解包,并将其传递给真正的函数。

真正的函数然后做它需要做的并返回到服务器 stub ,服务器 stub 可以打包返回信息并将其传递回客户端 stub 。

然后客户端 stub 将其解包并将其传递回调用者。

关于c - 什么是 stub 例程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4029313/

相关文章:

javascript - 回调接受器的正确术语

ruby-on-rails - RSpec:测试邮件程序是否只被调用一次

c - 使用 zLib 时错误放气和膨胀

c - 编译问题

terminology - 继续运动期限

c# - ??空合并运算符 --> 合并是什么意思?

python - 如何在 .pyi 文件中仅声明原始模块中的部分字段?

unit-testing - 使用 Microsoft Fakes 和静态通用方法填充

c - mmap() 得到一个带偏移量的 64 位值

C、函数格式化中的结构指针