⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 account_svc.c

📁 这是一个简单的模拟银行存取款的例子,目的是了解如何开发RPC服务程序.代码在LINUX下测试运行通过
💻 C
字号:
/* * Please do not edit this file. * It was generated using rpcgen. */#include "account.h"#include <stdio.h>#include <stdlib.h>#include <rpc/pmap_clnt.h>#include <string.h>#include <memory.h>#include <sys/socket.h>#include <netinet/in.h>#ifndef SIG_PF#define SIG_PF void(*)(int)#endifstatic voidaccount_1(struct svc_req *rqstp, register SVCXPRT *transp){	union {		int deposit_1_arg;		int withdraw_1_arg;	} argument;	char *result;	xdrproc_t _xdr_argument, _xdr_result;	char *(*local)(char *, struct svc_req *);	switch (rqstp->rq_proc) {	case NULLPROC:		(void) svc_sendreply (transp, (xdrproc_t) xdr_void, (char *)NULL);		return;	case deposit:		_xdr_argument = (xdrproc_t) xdr_int;		_xdr_result = (xdrproc_t) xdr_int;		local = (char *(*)(char *, struct svc_req *)) deposit_1_svc;		break;	case withdraw:		_xdr_argument = (xdrproc_t) xdr_int;		_xdr_result = (xdrproc_t) xdr_int;		local = (char *(*)(char *, struct svc_req *)) withdraw_1_svc;		break;	default:		svcerr_noproc (transp);		return;	}	memset ((char *)&argument, 0, sizeof (argument));	if (!svc_getargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) {		svcerr_decode (transp);		return;	}	result = (*local)((char *)&argument, rqstp);	if (result != NULL && !svc_sendreply(transp, (xdrproc_t) _xdr_result, result)) {		svcerr_systemerr (transp);	}	if (!svc_freeargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) {		fprintf (stderr, "%s", "unable to free arguments");		exit (1);	}	return;}intmain (int argc, char **argv){	register SVCXPRT *transp;	pmap_unset (ACCOUNT, ACCOUNT_VER);	transp = svcudp_create(RPC_ANYSOCK);	if (transp == NULL) {		fprintf (stderr, "%s", "cannot create udp service.");		exit(1);	}	if (!svc_register(transp, ACCOUNT, ACCOUNT_VER, account_1, IPPROTO_UDP)) {		fprintf (stderr, "%s", "unable to register (ACCOUNT, ACCOUNT_VER, udp).");		exit(1);	}	transp = svctcp_create(RPC_ANYSOCK, 0, 0);	if (transp == NULL) {		fprintf (stderr, "%s", "cannot create tcp service.");		exit(1);	}	if (!svc_register(transp, ACCOUNT, ACCOUNT_VER, account_1, IPPROTO_TCP)) {		fprintf (stderr, "%s", "unable to register (ACCOUNT, ACCOUNT_VER, tcp).");		exit(1);	}	svc_run ();	fprintf (stderr, "%s", "svc_run returned");	exit (1);	/* NOTREACHED */}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -