📄 billboard_rpc.c
字号:
/* ****************************************************************************** * * Module: billboard_rpc.c * * Description: billboard_rpc.c * Conatins routines that handle RPC calls. * * Functions: * bb_call_rpc(func_p, arg_p) * _get_handle() * * Notes: * ****************************************************************************** *//* ****************************************************************************** * Include Files ****************************************************************************** */#include <stdio.h>#include <rpc/rpc.h>#include "common.h"#include "protocol.h"/* ****************************************************************************** * Manifest Constants ****************************************************************************** */#define _SERVER_NAME "BB_SERVER" /* environment variable to set the billboard server name */#define _SERVER_NAME_LEN 64/* ****************************************************************************** * Global Declarations ****************************************************************************** */CLIENT *client_handle_p; /* request client handle */char server_name[_SERVER_NAME_LEN]; /* name of the billboard server *//* ****************************************************************************** * Function Declarations ****************************************************************************** */static CLIENT *_get_handle();char *bb_call_rpc();/* ****************************************************************************** * * Function: bb_call_rpc * * Description: * Gets client handle and does the remote procedure call. * * Input: * func_p -- address of remote procedure * arg_p -- input arguments to the remote procedure * * Output: * * Returns: * result of the RPC call * * Side Effects: * * Notes: * ****************************************************************************** */char *bb_call_rpc(func_p, arg_p)char *(*func_p)();char *arg_p;{ /* * gets client handle */ if (client_handle_p == NULL) client_handle_p= _get_handle(); /* * do the RPC call */ return((char *)(*func_p)(arg_p, client_handle_p));}/* ****************************************************************************** * * Function: _get_handle * * Description: * Gets client handle for the RPC call. * The server name may be specified in the environment * variable BB_SERVER, otherwise, the user will be prompted * for one. * * Input: * * Output: * * Returns: * client handle * * Side Effects: * * Notes: * ****************************************************************************** */staticCLIENT *_get_handle(){char *server_p;char buffer[BB_MAX_LINE_LEN];char *getenv();CLIENT *cl_handle_p; /* * gets the server name from the environment variable, if not specified * the user will be prompted */ if ((server_p= getenv(_SERVER_NAME)) == NULL) { printf("Server name: "); gets(buffer); sscanf(buffer, "%s", server_name); } else strcpy(server_name, server_p); /* * gets a client handle */ if ((cl_handle_p= clnt_create(server_name, BILLBOARD_PROG, BILLBOARD_VERS, "tcp")) == NULL) { clnt_pcreateerror(server_name); exit(1); } return(cl_handle_p);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -