17

Cに関して、スタブルーチンとは何ですか?また、例も大歓迎です。

4

4 に答える 4

24

スタブ ルーチンは、(少なくとも) 2 つのいずれかになります。


まず、後で実際のバージョンに置き換えることを意図して、より高いレベルのルーチンをテストするためにすばやく開発するプレースホルダー ルーチンにすることができます。これは通常、トップダウン開発 (最初に上位レベルをコーディングしてから、より詳細なものに進む) で使用され、次のように単純にすることができます。

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];
}

もちろん、スタブが十分に複雑になったら、実際のものを実装することもできます:-)


次に、リモート プロシージャ コール (RPC) 環境でよく使用されます。スタブは、一方の端でデータをマーシャリングし、もう一方の端でサーバーに通信するために使用されます。

RPC は、クライアントとサーバーのスタブ関数を作成する必要があります。これは C の関数プロトタイプに非常に似ていますが、最終結果は次のように少し異なります。

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

この例でfunctionは、同じプログラム内で呼び出す代わりに、呼び出し元がクライアントスタブ関数 ( と同じプロトタイプfunction) を呼び出します。この関数は、情報をパッケージ化し、ネットワークを介して別のプロセスに渡す役割を果たします。

これは同じマシンでも別のマシンでもかまいません。RPC の利点の 1 つは、サーバーを自由に移動できることです。

サーバーには、その情報を受信して​​サーバーに渡す「リスナー」プロセスがあります。サーバーのスタブは情報を受け取り、それをアンパックして、実際の関数に渡します。

次に、実際の関数が必要なことを実行し、サーバー スタブに戻ります。サーバー スタブは、戻り情報をパッケージ化してクライアント スタブに戻します。

その後、クライアント スタブはそれをアンパックし、呼び出し元に返します。

于 2010-10-27T01:42:03.767 に答える
11

実関数と同じシグネチャを持つ関数ですが、何も実行せず、本物と同じようにコンパイルして実行できます。例えば

int MyStub(char * str)
{
    /* Stub - Does Nothing */

    return 0;
}

これらはプレースホルダーとしてよく使用されるため、プログラム全体の構造を最初に作成し、次に詳細を作成することができます。

于 2010-10-27T01:29:03.263 に答える