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

📄 math_svc.c

📁 linux 高级编程的例子源码,包括了本书上的所有代码
💻 C
字号:
/* * Please do not edit this file. * It was generated using rpcgen. */#include "math.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>#include <rpc/auth.h>#ifndef SIG_PF#define SIG_PF void(*)(int)#endifstatic voidmath_prog_2(struct svc_req *rqstp, register SVCXPRT *transp){	union {		struct MATH math_proc_2_arg;	} argument;	char *result;	xdrproc_t _xdr_argument, _xdr_result;	char *(*local)(char *, struct svc_req *);    struct authunix_parms *sys_cred;
	int pass=0;
    switch (rqstp->rq_cred.oa_flavor)
	{
	case AUTH_NONE:
		printf("The AUTH style is AUTH_NONE\n");
		break;
	case AUTH_SYS:
        printf("The AUTH style is AUTH_SYS\n");
        sys_cred=(struct authunix_parms*)rqstp->rq_clntcred;		if ((strcmp(sys_cred->aup_machname,"localhost")==0)&&(sys_cred->aup_uid==0)
			                                                &&(sys_cred->aup_gid==0))
		    pass=1;

		break;
	case AUTH_SHORT:
		printf("The AUTH style is AUTH_SHORT\n");
		break;
	case AUTH_DES:
		printf("The AUTH style is AUTH_DES\n");
	        break;
	default:
		break;
	}

	if (!pass)
	{
		svcerr_weakauth(transp);
		return ;
	}
	switch (rqstp->rq_proc) {	case NULLPROC:		(void) svc_sendreply (transp, (xdrproc_t) xdr_void, (char *)NULL);		return;	case MATH_PROC:		_xdr_argument = (xdrproc_t) xdr_MATH;		_xdr_result = (xdrproc_t) xdr_MATH;		local = (char *(*)(char *, struct svc_req *)) math_proc_2_svc;		break;	default:		svcerr_noproc (transp);		return;	}	memset ((char *)&argument, 0, sizeof (argument));	if (!svc_getargs (transp, _xdr_argument, (caddr_t) &argument)) {		svcerr_decode (transp);		return;	}	result = (*local)((char *)&argument, rqstp);	if (result != NULL && !svc_sendreply(transp, _xdr_result, result)) {		svcerr_systemerr (transp);	}	if (!svc_freeargs (transp, _xdr_argument, (caddr_t) &argument)) {		fprintf (stderr, "unable to free arguments");		exit (1);	}	return;}intmain (int argc, char **argv){	register SVCXPRT *transp;	pmap_unset (MATH_PROG, MATH_VER);	transp = svcudp_create(RPC_ANYSOCK);	if (transp == NULL) {		fprintf (stderr, "cannot create udp service.");		exit(1);	}	if (!svc_register(transp, MATH_PROG, MATH_VER, math_prog_2, IPPROTO_UDP)) {		fprintf (stderr, "unable to register (MATH_PROG, MATH_VER, udp).");		exit(1);	}	transp = svctcp_create(RPC_ANYSOCK, 0, 0);	if (transp == NULL) {		fprintf (stderr, "cannot create tcp service.");		exit(1);	}	if (!svc_register(transp, MATH_PROG, MATH_VER, math_prog_2, IPPROTO_TCP)) {		fprintf (stderr, "unable to register (MATH_PROG, MATH_VER, tcp).");		exit(1);	}	svc_run ();	fprintf (stderr, "svc_run returned");	exit (1);	/* NOTREACHED */}

⌨️ 快捷键说明

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