ibm-information-center/dist/eclipse/plugins/i5OS.ic.rzahp_5.4.0.1/rzahhpsimpclient.htm

365 lines
14 KiB
HTML

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="en-us" xml:lang="en-us">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="security" content="public" />
<meta name="Robots" content="index,follow" />
<meta http-equiv="PICS-Label" content='(PICS-1.1 "http://www.icra.org/ratingsv02.html" l gen true r (cz 1 lz 1 nz 1 oz 1 vz 1) "http://www.rsac.org/ratingsv01.html" l gen true r (n 0 s 0 v 0 l 0) "http://www.classify.org/safesurf/" l gen true r (SS~~000 1))' />
<meta name="DC.Type" content="reference" />
<meta name="DC.Title" content="Example: TI-RPC simplified-level client API" />
<meta name="abstract" content="This code example illustrates a simplified-level client API that is used in developing TI-RPC applications." />
<meta name="description" content="This code example illustrates a simplified-level client API that is used in developing TI-RPC applications." />
<meta name="DC.Relation" scheme="URI" content="rzahpclientcode.htm" />
<meta name="copyright" content="(C) Copyright IBM Corporation 1998, 2006" />
<meta name="DC.Rights.Owner" content="(C) Copyright IBM Corporation 1998, 2006" />
<meta name="DC.Format" content="XHTML" />
<meta name="DC.Identifier" content="rzahhpsimpclient" />
<meta name="DC.Language" content="en-us" />
<!-- All rights reserved. Licensed Materials Property of IBM -->
<!-- US Government Users Restricted Rights -->
<!-- Use, duplication or disclosure restricted by -->
<!-- GSA ADP Schedule Contract with IBM Corp. -->
<link rel="stylesheet" type="text/css" href="./ibmdita.css" />
<link rel="stylesheet" type="text/css" href="./ic.css" />
<title>Example: TI-RPC simplified-level client API</title>
</head>
<body id="rzahhpsimpclient"><a name="rzahhpsimpclient"><!-- --></a>
<!-- Java sync-link --><script language="Javascript" src="../rzahg/synch.js" type="text/javascript"></script>
<h1 class="topictitle1">Example: TI-RPC simplified-level client API</h1>
<div><p>This code example illustrates a simplified-level client API that
is used in developing TI-RPC applications.</p>
<div class="section"><p>The simplified-level client API is the quickest and
shortest set of code, because the client creation, control, use, and destruction
are all in one call. This is convenient, but it does not allow the customization
that can be done with a client handle. Defaults are accepted for timeout and
buffer sizes, which is the most significant difference between the simplified
level and the other levels.</p>
<div class="note"><span class="notetitle">Note:</span> By using the code example, you agree
to the terms of the <a href="codedisclaimer.htm">Code license and disclaimer information</a>.</div>
<pre>#include &lt;stdio.h&gt;
#include &lt;errno.h&gt;
#include "myapp.h"
#define EXIT 100
int main(void) {
enum clnt_stat rslt; /* return value of rpc_call() */
char hostname[256]; /* buffer for remote service's hostname */
unsigned long procnum; /* procedure to call */
char filename[512]; /* buffer for filename */
char *arg = filename; /* pointer to filename buffer */
union {
u_int myapp_get_uid_result;
char * myapp_get_uid_string_result;
int myapp_get_size_result;
long myapp_get_mtime_result;
char * myapp_get_mtime_string_result;
u_short myapp_get_codepage_result;
char * myapp_get_objtype_result;
char * myapp_get_filetype_result;
} result; /* a union of all the possible results */
/* get the hostname from the user */
printf("Enter the hostname where the remote service is running: \n");
scanf("%s", (char *)&amp;hostname);
myapp_print_menu(); /* print out the menu choices */
/* get the procedure number to call from the user */
printf("\nEnter a procedure number to call: \n");
scanf("%lu", &amp;procnum);
/* get the filename from the user */
printf("\nEnter a filename to stat: \n");
scanf("%s", (char *)&amp;arg);
/* switch on the input */
switch (procnum) {
case NULLPROC:
/* rpc_call(host, prognum, versnum, procnum, */
/* xdr_in, in, xdr_out, out, nettype); */
rslt = rpc_call(hostname, PROGNUM, VERSNUM, procnum,
(xdrproc_t)xdr_void, (char *)NULL, /* xdr_in */
(xdrproc_t)xdr_void, (char *)NULL, /* xdr_out */
NETTYPE);
/* check return value of rpc_call() */
if (rslt != RPC_SUCCESS) {
fprintf(stderr, "Error calling rpc_call(%lu)\n", procnum);
fprintf(stderr, "clnt_stat: %d\n", rslt);
fprintf(stderr, "errno: %d\n", errno);
return 1;
}
/* print results and exit */
printf("NULLRPOC call succeeded\n");
break;
case GET_UID:
/* rpc_call(host, prognum, versnum, procnum, */
/* xdr_in, in, xdr_out, out, nettype); */
rslt = rpc_call(hostname, PROGNUM, VERSNUM, procnum,
xdr_wrapstring, (char *)&amp;arg, /* xdr_in */
xdr_u_int, (char *)&amp;result, /* xdr_out */
NETTYPE);
/* check return value of rpc_call() */
if (rslt != RPC_SUCCESS) {
fprintf(stderr, "Error calling rpc_call(%lu)\n", procnum);
fprintf(stderr, "clnt_stat: %d\n", rslt);
fprintf(stderr, "errno: %d\n", errno);
return 1;
}
/* print results and exit */
printf("uid of %s: %u\n",
filename, result.myapp_get_uid_result);
break;
case GET_UID_STRING:
/* rpc_call(host, prognum, versnum, procnum, */
/* xdr_in, in, xdr_out, out, nettype); */
rslt = rpc_call(hostname, PROGNUM, VERSNUM, procnum,
xdr_wrapstring, (char *)&amp;arg, /* xdr_in */
xdr_wrapstring, (char *)&amp;result, /* xdr_out */
NETTYPE);
/* check return value of rpc_call() */
if (rslt != RPC_SUCCESS) {
fprintf(stderr, "Error calling rpc_call(%lu)\n", procnum);
fprintf(stderr, "clnt_stat: %d\n", rslt);
fprintf(stderr, "errno: %d\n", errno);
return 1;
}
/* print results and exit */
printf("owner of %s: %s\n",
filename, result.myapp_get_uid_string_result);
break;
case GET_SIZE:
/* rpc_call(host, prognum, versnum, procnum, */
/* xdr_in, in, xdr_out, out, nettype); */
rslt = rpc_call(hostname, PROGNUM, VERSNUM, procnum,
xdr_wrapstring, (char *)&amp;arg, /* xdr_in */
xdr_int, (char *)&amp;result, /* xdr_out */
NETTYPE);
/* check return value of rpc_call() */
if (rslt != RPC_SUCCESS) {
fprintf(stderr, "Error calling rpc_call(%lu)\n", procnum);
fprintf(stderr, "clnt_stat: %d\n", rslt);
fprintf(stderr, "errno: %d\n", errno);
return 1;
}
/* print results and exit */
printf("size of %s: %d\n",
filename, result.myapp_get_size_result);
break;
case GET_MTIME:
/* rpc_call(host, prognum, versnum, procnum, */
/* xdr_in, in, xdr_out, out, nettype); */
rslt = rpc_call(hostname, PROGNUM, VERSNUM, procnum,
xdr_wrapstring, (char *)&amp;arg, /* xdr_in */
xdr_long, (char *)&amp;result, /* xdr_out */
NETTYPE);
/* check return value of rpc_call() */
if (rslt != RPC_SUCCESS) {
fprintf(stderr, "Error calling rpc_call(%lu)\n", procnum);
fprintf(stderr, "clnt_stat: %d\n", rslt);
fprintf(stderr, "errno: %d\n", errno);
return 1;
}
/* print results and exit */
printf("last modified time of %s: %ld\n",
filename, result.myapp_get_mtime_result);
break;
case GET_MTIME_STRING:
/* rpc_call(host, prognum, versnum, procnum, */
/* xdr_in, in, xdr_out, out, nettype); */
rslt = rpc_call(hostname, PROGNUM, VERSNUM, procnum,
xdr_wrapstring, (char *)&amp;arg, /* xdr_in */
xdr_wrapstring, (char *)&amp;result, /* xdr_out */
NETTYPE);
/* check return value of rpc_call() */
if (rslt != RPC_SUCCESS) {
fprintf(stderr, "Error calling rpc_call(%lu)\n", procnum);
fprintf(stderr, "clnt_stat: %d\n", rslt);
fprintf(stderr, "errno: %d\n", errno);
return 1;
}
/* print results and exit */
printf("last modified time of %s: %s\n",
filename, result.myapp_get_mtime_string_result);
break;
case GET_CODEPAGE:
/* rpc_call(host, prognum, versnum, procnum, */
/* xdr_in, in, xdr_out, out, nettype); */
rslt = rpc_call(hostname, PROGNUM, VERSNUM, procnum,
xdr_wrapstring, (char *)&amp;arg, /* xdr_in */
xdr_u_short, (char *)&amp;result, /* xdr_out */
NETTYPE);
/* check return value of rpc_call() */
if (rslt != RPC_SUCCESS) {
fprintf(stderr, "Error calling rpc_call(%lu)\n", procnum);
fprintf(stderr, "clnt_stat: %d\n", rslt);
fprintf(stderr, "errno: %d\n", errno);
return 1;
}
/* print results and exit */
printf("codepage of %s: %d\n",
filename, result.myapp_get_codepage_result);
break;
case GET_OBJTYPE:
/* rpc_call(host, prognum, versnum, procnum, */
/* xdr_in, in, xdr_out, out, nettype); */
rslt = rpc_call(hostname, PROGNUM, VERSNUM, procnum,
xdr_wrapstring, (char *)&amp;arg, /* xdr_in */
xdr_wrapstring, (char *)&amp;result, /* xdr_out */
NETTYPE);
/* check return value of rpc_call() */
if (rslt != RPC_SUCCESS) {
fprintf(stderr, "Error calling rpc_call(%lu)\n", procnum);
fprintf(stderr, "clnt_stat: %d\n", rslt);
fprintf(stderr, "errno: %d\n", errno);
return 1;
}
/* print results and exit */
printf("object type of %s: %s\n",
filename, result.myapp_get_objtype_result);
break;
case GET_FILETYPE:
/* rpc_call(host, prognum, versnum, procnum, */
/* xdr_in, in, xdr_out, out, nettype); */
rslt = rpc_call(hostname, PROGNUM, VERSNUM, procnum,
xdr_wrapstring, (char *)&amp;arg, /* xdr_in */
xdr_wrapstring, (char *)&amp;result, /* xdr_out */
NETTYPE);
/* check return value of rpc_call() */
if (rslt != RPC_SUCCESS) {
fprintf(stderr, "Error calling rpc_call(%lu)\n", procnum);
fprintf(stderr, "clnt_stat: %d\n", rslt);
fprintf(stderr, "errno: %d\n", errno);
return 1;
}
/* print results and exit */
printf("file type of %s: %s\n",
filename, result.myapp_get_filetype_result);
break;
case END_SERVER:
/* rpc_call(host, prognum, versnum, procnum, */
/* xdr_in, in, xdr_out, out, nettype); */
rslt = rpc_call(hostname, PROGNUM, VERSNUM, procnum,
(xdrproc_t)xdr_void, (char *)NULL, /* xdr_in */
(xdrproc_t)xdr_void, (char *)NULL, /* xdr_out */
NETTYPE);
/* check return value of rpc_call() */
if (rslt != RPC_SUCCESS) {
fprintf(stderr, "Error calling rpc_call(%lu)\n", procnum);
fprintf(stderr, "clnt_stat: %d\n", rslt);
fprintf(stderr, "errno: %d\n", errno);
return 1;
}
/* print results and exit */
printf("Service has been unregistered.\n");
printf("You must still kill the job in QBATCH\n");
break;
case EXIT:
/* do nothing and exit */
printf("Exiting program now.\n");
return 1;
break;
default:
/* an invalid procedure number was entered */
/* we could just exit here */
printf("Invalid choice. Issuing NULLRPOC instead.\n");
procnum = NULLPROC;
/* rpc_call(host, prognum, versnum, procnum, */
/* xdr_in, in, xdr_out, out, nettype); */
rslt = rpc_call(hostname, PROGNUM, VERSNUM, procnum,
(xdrproc_t)xdr_void, (char *)NULL, /* xdr_in */
(xdrproc_t)xdr_void, (char *)NULL, /* xdr_out */
NETTYPE);
/* check return value of rpc_call() */
if (rslt != RPC_SUCCESS) {
fprintf(stderr, "Error calling rpc_call(%lu)\n", procnum);
fprintf(stderr, "clnt_stat: %d\n", rslt);
fprintf(stderr, "errno: %d\n", errno);
return 1;
}
/* print results and exit */
printf("NULLRPOC call succeeded\n");
break;
} /* end of switch(procnum) */
/* no cleanup is required for rpc_call() */
return 0;
}
void myapp_print_menu(void) {
/* print out the procedure choices */
printf("%.2ld - GET_UID %.2ld - GET_UID_STRING\n",
GET_UID, GET_UID_STRING);
printf("%.2ld - GET_SIZE %.2ld - GET_MTIME\n",
GET_SIZE, GET_MTIME);
printf("%.2ld - GET_MTIME_STRING %.2ld - GET_CODEPAGE\n",
GET_MTIME_STRING, GET_CODEPAGE);
printf("%.2ld - GET_OBJTYPE %.2ld - GET_FILETYPE\n",
GET_OBJTYPE, GET_FILETYPE);
printf("%.2ld - END_SERVER %.2d - EXIT\n",
END_SERVER, EXIT);
}</pre>
</div>
</div>
<div>
<div class="familylinks">
<div class="parentlink"><strong>Parent topic:</strong> <a href="rzahpclientcode.htm" title="Transport independent remote procedure call (TI-RPC) programming provides an effective method for developing distributed client-server based applications on i5/OS.">Develop client applications based on TI-RPC code examples</a></div>
</div>
</div>
</body>
</html>