The following example uses the iSeries™ Access for Windows® Serviceability APIs to log a message string to theiSeries Access for Windows History Log.
#include <stdio.h>
#include "CWBSV.H"
unsigned int logMessageText(char *msgtxt)
/* Write a message to the active message log. */
{
cwbSV_MessageTextHandle messageTextHandle;
unsigned int rc;
/* Create a handle to a message text object, so that we may write */
/* message text to the active message log. */
if ((rc = cwbSV_CreateMessageTextHandle("ProductID", "ComponentID",
&messageTextHandle)) != CWB_OK)
return(rc);
/* Log the supplied message text to the active message log. */
rc = cwbSV_LogMessageText(messageTextHandle, msgtxt, strlen(msgtxt));
/* Delete the message text object identified by the handle provided.*/
cwbSV_DeleteMessageTextHandle(messageTextHandle);
return(rc);
}
unsigned int readMessageText(char **bufptr, cwbSV_ErrHandle errorHandle)
/* Read a message from the active message log. */
{
cwbSV_ServiceFileHandle serviceFileHandle;
cwbSV_ServiceRecHandle serviceRecHandle;
static char buffer[BUFSIZ];
unsigned int rc;
/* Retrieve the fully-qualified path and file name of the active */
/* message log. */
if ((rc = cwbSV_GetServiceFileName(CWBSV_HISTORY_LOG, buffer, BUFSIZ,
NULL)) != CWB_OK)
return(rc);
/* Open the active message log for READ access and return a handle */
/* to it. */
if ((rc = cwbSV_OpenServiceFile(buffer, &serviceFileHandle, errorHandle))
!= CWB_OK)
return(rc);
/* Create a service record object and return a handle to it. */
if ((rc = cwbSV_CreateServiceRecHandle(&serviceRecHandle)) != CWB_OK) {
cwbSV_CloseServiceFile(serviceFileHandle, 0);
return(rc);
}
/* Read the newest record in the active message log into the */
/* record handle provided. */
if ((rc = cwbSV_ReadNewestRecord(serviceFileHandle, serviceRecHandle,
errorHandle)) != CWB_OK) {
cwbSV_DeleteServiceRecHandle(serviceRecHandle);
cwbSV_CloseServiceFile(serviceFileHandle, 0);
return(rc);
}
/* Retrieve the message text portion of the service record object */
/* identified by the handle provided. */
if ((rc = cwbSV_GetMessageText(serviceRecHandle, buffer, BUFSIZ, NULL))
== CWB_OK || rc == CWB_BUFFER_OVERFLOW) {
*bufptr = buffer;
rc = CWB_OK;
}
/* Delete the service record object identified by the */
/* handle provided. */
cwbSV_DeleteServiceRecHandle(serviceRecHandle);
/* Close the active message log identified by the handle provided.*/
cwbSV_CloseServiceFile(serviceFileHandle, errorHandle);
return(rc);
}
void main(int argc, char *argv[ [)
{
cwbSV_ErrHandle errorHandle;
char *msgtxt = NULL, errbuf[BUFSIZ];
unsigned int rc;
/* Write a message to the active message log. */
if (logMessageText("Sample message text") != CWB_OK)
return;
/* Create an error message object and return a handle to it. */
cwbSV_CreateErrHandle(&errorHandle);
/* Read a message from the active message log. */
if (readMessageText(&msgtxt, errorHandle) != CWB_OK) {
if ((rc = cwbSV_GetErrText(errorHandle, errbuf, BUFSIZ, NULL)) ==
CWB_OK || rc == CWB_BUFFER_OVERFLOW)
fprintf(stdout, "%s\n", errbuf);
}
else if (msgtxt)
fprintf(stdout, "Message text: \"%s\"\n", msgtxt);
/* Delete the error message object identified by the */
/* handle provided. */
cwbSV_DeleteErrHandle(errorHandle);
}