サーバーからデータを受信するコーディング例
この例は、API 関数を使用して IBM® Storage Protect ストレージからデータを取得する方法を示しています。
dsmBeginGetData 関数呼び出しは、switch ステートメント内に現れます。これにより、リストア操作またはリトリーブ操作のどちらが実行されているかに応じて、異なるパラメーターを呼び出すことができます。 dsmGetData 関数呼び出しは、プログラムの実行がループを終了することを許可するフラグが設定されるまで、サーバーから繰り返しデータを取得するループ内から呼び出されます。
/* Call dsmBeginQuery and create a linked list of objects to restore. */
/* Process this list to create the proper list for the GetData calls. */
/* Set up the getList structure to point to this list. */
/* This example is set up to perform a partial object retrieve. To */
/* retrieve only complete objects, set up: */
/* getList.stVersion = dsmGetListVersion; */
/* getList.partialObjData = NULL; */
dsmGetList getList;
getList.stVersion = dsmGetListPORVersion; /* structure version */
getList.numObjId = items; /* number of items in list */
getList.objId = (ObjID *)rest_ibuff;
/* list of object IDs to restore */
getList.partialObjData = (PartialObjData *) part_ibuff;
/* list of partial object data */
switch(get_type)
{
case (Restore_Get) :
rc = dsmBeginGetData(dsmHandle,bFalse,gtBackup,&getList);
break;
case (Retrieve_Get) :
rc = dsmBeginGetData(dsmHandle,bFalse,gtArchive,&getList);
break;
default : ;
}
if (rc)
{
printf("*** dsmBeginGetData failed: ");
rcApiOut(dsmHandle, rc);
return rc;
}
/* Get each object from the list and verify whether it is on the */
/* server. If so, initialize structures with object attributes for */
/* data validation checks. When done, call dsmGetObj. */
rc = dsmGetObj(dsmHandle,objId,&dataBlk);
done = bFalse;
while(!done)
{
if ( (rc == DSM_RC_MORE_DATA)
|| (rc == DSM_RC_FINISHED))
{
if (rc == DSM_RC_MORE_DATA)
{
dataBlk.numBytes = 0;
rc = dsmGetData(dsmHandle,&dataBlk);
}
else
done = bTrue;
}
else
{
printf("*** dsmGetObj or dsmGetData failed: ");
rcApiOut(dsmHandle, rc);
done = bTrue;
}
} /* while */
rc = dsmEndGetObj(dsmHandle);
/* check rc from dsmEndGetObj */
/* check rc from dsmEndGetData */
rc = dsmEndGetData(dsmHandle);
return 0;