Cに関して、スタブルーチンとは何ですか?また、例も大歓迎です。
4 に答える
スタブ ルーチンは、(少なくとも) 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 つは、サーバーを自由に移動できることです。
サーバーには、その情報を受信してサーバーに渡す「リスナー」プロセスがあります。サーバーのスタブは情報を受け取り、それをアンパックして、実際の関数に渡します。
次に、実際の関数が必要なことを実行し、サーバー スタブに戻ります。サーバー スタブは、戻り情報をパッケージ化してクライアント スタブに戻します。
その後、クライアント スタブはそれをアンパックし、呼び出し元に返します。
実関数と同じシグネチャを持つ関数ですが、何も実行せず、本物と同じようにコンパイルして実行できます。例えば
int MyStub(char * str)
{
/* Stub - Does Nothing */
return 0;
}
これらはプレースホルダーとしてよく使用されるため、プログラム全体の構造を最初に作成し、次に詳細を作成することができます。