Ejemplo de código de funciones de API que envían datos al almacenamiento de IBM Storage Protect
Este ejemplo muestra el uso de las funciones de API que envían datos al almacenamiento de IBM® Storage Protect . La llamada dsmSendObj aparece dentro de una sentencia switch, de modo que se pueden llamar distintos parámetros en función de si se está realizando una operación de copia de seguridad o archivado.
La llamada dsmSendData se llama desde dentro de un bucle que envía repetidamente datos hasta que se establece un distintivo que permite que la ejecución del programa salga del bucle. Toda la operación de envío se lleva a cabo desde dentro de la transacción.
El tercer parámetro de la llamada dsmSendObj es un almacenamiento intermedio que contiene la descripción de archivado. Debido a que los objetos a los que se les realiza una copia de seguridad no tienen una descripción, este parámetro es NULO cuando se lleva a cabo una copia de seguridad de un objeto.
La Figura 1 muestra un ejemplo que muestra el uso de la llamada a función dsmBindMC .
if ((rc = dsmBeginTxn(dsmHandle)) ) /* API session handle */
{
printf("*** dsmBeginTxn failed: ");
rcApiOut(dsmHandle, rc);
return;
}
/* Call dsmBindMC if not done previously */
objAttr.sizeEstimate.hi = 0; /* estimate of */
objAttr.sizeEstimate.lo = 32000; /* object size */
switch (send_type)
{
case (Backup_Send) :
rc = dsmSendObj(dsmHandle,stBackup,
NULL,&objName,&objAttr,NULL);
break;
case (Archive_Send) :
archData.stVersion = sndArchiveDataVersion;
archData.descr = desc;
rc = dsmSendObj(dsmHandle,stArchive,
&archData,&objName,&objAttr,NULL);
break;
default : ;
}
if (rc)
{
printf("*** dsmSendObj failed: ");
rcApiOut(dsmHandle, rc);
return;
}
done = bFalse;
while (!done)
{
dataBlk.stVersion = DataBlkVersion;
dataBlk.bufferLen = send_amt;
dataBlk.numBytes = 0;
dataBlk.bufferPtr = bkup_buff;
rc = dsmSendData(dsmHandle,&dataBlk);
if (rc)
{
printf("*** dsmSendData failed: ");
rcApiOut(dsmHandle, rc);
done = bTrue;
}
/* Adjust the dataBlk buffer for the next piece to send */
}
rc = dsmEndSendObj(dsmHandle);
if (rc)
{
printf("*** dsmEndSendObj failed: ");
rcApiOut(dsmHandle, rc);
}
txn_reason = 0;
rc = dsmEndTxn(dsmHandle, /* API session handle */
DSM_VOTE_COMMIT, /* Commit transaction */
&txn_reason); /* Reason if txn aborted */
if (rc || txn_reason)
{
printf("*** dsmEndTxn failed: rc = ");
rcApiOut(dsmHandle, rc);
printf(" reason =
}