asnccp コマンドを使用して収集プログラムを開始したり、 asnapply コマンドを使用して変更適用プログラムを開始したりする代わりに、 アプリケーションの中からルーチンを呼び出して、収集および変更適用プログラムを開始することができます。 これらのルーチンを使用するには、 収集プログラムの場合は AUTOSTOP オプション、 変更適用プログラムの場合は COPYONCE オプションを指定しなければなりません。 これは、この API が同期実行しかサポートしていないためです。
この章では、これらのルーチンおよび戻りコードについて説明します。 また、収集および変更適用プログラムを開始するサンプル・ルーチンも示します。
アプリケーションの中から収集プログラムを開始するには、次のルーチンを呼び出します。
#ifndef ASN_INCLUDE #define ASN_INCLUDE #define MAXASNPARMLENGTH 128 struct asnParm { short byteCount; char val[MAXASNPARMLENGTH]; }; struct asnParms { int parmCount; struct asnParm **parms; }; int asnCapture(struct asnParms *pAsnParms); #endif
このルーチンは、次の戻りコードを戻します。
アプリケーションの中から変更適用プログラムを開始するには、次のルーチンを呼び出します。
#ifndef ASN_INCLUDE #define ASN_INCLUDE #define MAXASNPARMLENGTH 128 struct asnParm { short byteCount; char val[MAXASNPARMLENGTH]; }; struct asnParms { int parmCount; struct asnParm **parms; }; int asnApply(struct asnParms *pAsnParms); #endif
このルーチンは、次の戻りコードを戻します。
次のサンプル・ルーチンは、収集および変更適用プログラムを開始します。
#include <stdlib.h> #include <string.h> /* for strcpy, strlen */ #include <asn.h> /* replication API parameters */ /* helper function to dump out parameter contents */ int printParms( const struct asnParms parms ) { int count = 0; if( parms.parmCount > 0 ) { for( count=0; count<parms.parmcount>val ); printf( " bytes = %d\n", parms.parms[count]->byteCount ); } return(0); } else return(-1); } int main(int argc, char** argv) { struct asnParms captureParms; struct asnParms applyParms; struct asnParm *currParm; int rc = 0; int count = 0; /* allocate and initialize capture parameter structure */ captureParms.parmCount = 4; captureParms.parms = (struct asnParm **)malloc(captureParms.parmCount * sizeof(struct asnParm*)); currParm = (struct asnParm *)malloc(sizeof(struct asnParm)); strcpy( currParm->val, "SRCESRV" ); currParm->byteCount = strlen( currParm->val ); captureParms.parms[0] = currParm; /* first capture parameter */ currParm = (struct asnParm *)malloc(sizeof(struct asnParm)); strcpy( currParm->val, "WARM" ); currParm->byteCount = strlen( currParm->val ); captureParms.parms[1] = currParm; /* second capture parameter */ currParm = (struct asnParm *)malloc(sizeof(struct asnParm)); strcpy( currParm->val, "NOPRUNE" ); currParm->byteCount = strlen( currParm->val ); captureParms.parms[2] = currParm; /* third capture parameter */ currParm = (struct asnParm *)malloc(sizeof(struct asnParm)); strcpy( currParm->val, "AUTOSTOP" ); currParm->byteCount = strlen( currParm->val ); captureParms.parms[3] = currParm; /* fourth capture parameter */ rc = printParms( captureParms ); /* print parameters out to verify */ rc = asnCapture(&captureParms;); if( rc!=0 ) printf("Capture failed with rc = %d\n", rc ); else printf("Capture completed successfully\n" ); /* allocate and initialize capture parameter structure */ applyParms.parmCount = 3; applyParms.parms = (struct asnParm **)malloc(applyParms.parmCount * sizeof(struct asnParm*)); currParm = (struct asnParm *)malloc(sizeof(struct asnParm)); strcpy( currParm->val, "APPLYQUAL" ); currParm->byteCount = strlen( currParm->val ); applyParms.parms[0] = currParm; /* first capture parameter */ currParm = (struct asnParm *)malloc(sizeof(struct asnParm)); strcpy( currParm->val, "CNTLSRV" ); currParm->byteCount = strlen( currParm->val ); applyParms.parms[1] = currParm; /* second capture parameter */ currParm = (struct asnParm *)malloc(sizeof(struct asnParm)); strcpy( currParm->val, "COPYONCE" ); currParm->byteCount = strlen( currParm->val ); applyParms.parms[2] = currParm; /* third capture parameter */ rc = asnApply(&applyParms;); if( rc!=0 ) printf("Apply failed with rc = %d\n", rc ); else printf("Apply completed successfully\n" ); for(count = 0; count<= captureParms.parmCount; count++) free( captureParms.parms[count] ); free( captureParms.parms ); for(count = 0; count<= applyParms.parmCount; count++) free( applyParms.parms[count] ); free( applyParms.parms ); return(rc); }