www.pudn.com > vxWorks_Lab.rar > vxTimeClient.c


/* vxTimeClient.c - RPC client example */ 
 
#include "vxWorks.h" 
#include "stdio.h" 
#include "stdlib.h" 
#include "rpcLib.h" 
#include "rpc/rpc.h" 
#include "time.h" 
 
LOCAL CLIENT * pClient; 
 
/************************************************* 
* 
* printTime - print the date and time in a human- 
* readable format.  
*    For interactive use from the WindSh shell,  
* just pass 0 as the second argument ppClient. 
* For programmatic use, declare a variable of 
* type CLIENT *, initialize it to NULL, and 
* pass the address of the variable as the ppClient 
* argument. The variable will be set to a newly 
* created CLIENT *, which may be reused in later 
* calls to printTime by the same task. When the task 
* has called printTime () for the last time, it should 
* clean up its CLIENT * with a call to  
* clnt_destroy(). 
*/ 
 
STATUS printTime  
	( 
	char * host, 
	CLIENT ** ppClient 
	) 
	{ 
	char **ptr; 
 
	if (ppClient == NULL) 
		{ 
		pClient = NULL; 
		ppClient = &pClient; 
		} 
 
	/* 
	 * If *ppClient is NULL, this task has not 
	 * previously called printTime, and we should 
	 * initialize RPC support and create a new  
	 * client handle for it. Note: it's ok to call 
	 * rpcTaskInit() more than once for the same 
	 * task. 
	 */ 
 
	if (*ppClient == NULL) 
		{ 
		if (rpcTaskInit() == ERROR) 
			{ 
			perror ("rpcTaskInit() failed"); 
			return (ERROR); 
			} 
 
		*ppClient = clnt_create (host, TIME_PROG, 
										TIME_VERS, "tcp"); 
		if (*ppClient == NULL) 
			{ 
			perror ("clnt_create failed"); 
			return (ERROR); 
			} 
		} 
 
	 if ((ptr = print_time_1 (NULL, *ppClient)) 
			== NULL) 
		{ 
		perror ("print_time_1 failed"); 
		clnt_destroy (*ppClient); 
		*ppClient = NULL; 
		return (ERROR); 
		} 
 
	printf (*ptr); 
 
	free (*ptr); 
	 
	/* 
	 * interactive use: destroy *ppClient. 
	 * otherwise, caller is responsible. 
	 */ 
 
	if (ppClient == &pClient) 
		clnt_destroy (pClient); 
 
	return (OK); 
	}