pax*_*blo 20
存根例程可以是(至少)两件事之一.
首先,它可以是一个占位符例程,您可以快速开发以测试更高级别的例程,以便稍后替换真实版本.这通常用于自上而下的开发(首先编写更高级别然后逐步编写更详细的东西),并且可以简单到:
int getCount (void) { return 7; } // just return fixed value for testing.
Run Code Online (Sandbox Code Playgroud)
或稍微复杂一点:
// 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];
}
Run Code Online (Sandbox Code Playgroud)
当然,一旦存根变得足够复杂,你也可以实现真实的东西:-)
其次,它通常用于远程过程调用(RPC)环境.存根用于在一端编组数据并将其传送到另一端的服务器.
RPC需要为客户端和服务器创建存根函数.它与C中的函数原型非常相似,但最终结果略有不同,例如:
+----------------+
| Client |
| +----------+ | +---------------+
| | caller | | | Server |
| |----------| | | +----------+ |
| | stub_cli |---- (over the wire) --->| stub_svr | |
| +----------+ | | |----------| |
+----------------+ | | function | |
| +----------+ |
+---------------+
Run Code Online (Sandbox Code Playgroud)
在这个例子中,不是调用function
同一个程序,而是调用function
客户端存根函数(与原型相同function
),它负责打包信息并将其通过线路传递给另一个进程.这可能是同一台机器或不同的机器,它并不重要 - RPC的一个优点是能够随意移动服务器.
在服务器中,有一个"监听器"进程将接收该信息并将其传递给服务器.服务器的存根接收信息,解压缩并将其传递给实际功能.
然后,真正的函数执行它需要的操作并返回到服务器存根,服务器存根可以打包返回信息并将其传递回客户端存根.
然后客户端存根解压缩并将其传递回function
.
它是一个与真实函数具有相同签名的函数,但它什么都不做,并且可以像真实函数一样编译和执行.例如
int MyStub(char * str)
{
/* Stub - Does Nothing */
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这些通常用作占位符,因此可以首先计算整个程序结构,然后再计算细节.
归档时间: |
|
查看次数: |
15578 次 |
最近记录: |