I can't tell where is the problem, i need this to be done and work. I have the source here and i ask for help.
I think that this program runs only on unix, i want to get this work on knoppix. Note that i am not so good on this.
Code:avg.x /* * The average procedure receives an array of real * numbers and returns the average of their * values. This toy service handles a maximum of * 200 numbers. */ const MAXAVGSIZE = 200; struct input_data { double input_data<200>; }; typedef struct input_data input_data; program AVERAGEPROG { version AVERAGEVERS { double AVERAGE(input_data) = 1; } = 1; } = 22855; -------------------------------- avg_svc.c #include "avg.h" #include <stdlib.h> void averageprog_1( char* host, int argc, char *argv[]) { CLIENT *clnt; double *result_1, *dp, f; char *endptr; int i; input_data average_1_arg; average_1_arg.input_data.input_data_val = (double*) malloc(MAXAVGSIZE*sizeof(double)); dp = average_1_arg.input_data.input_data_val; average_1_arg.input_data.input_data_len = argc - 2; for (i=1;i<=(argc - 2);i++) { f = strtod(argv[i+1],&endptr); printf("value = %e\n",f); *dp = f; dp++; } clnt = clnt_create(host, AVERAGEPROG, AVERAGEVERS, "udp"); if (clnt == NULL) { clnt_pcreateerror(host); exit(1); } result_1 = average_1(&average_1_arg, clnt); if (result_1 == NULL) { clnt_perror(clnt, "call failed:"); } clnt_destroy( clnt ); printf("average = %e\n",*result_1); } main( int argc, char* argv[] ) { char *host; if(argc < 3) { printf( "usage: %s server_host value ...\n", argv[0]); exit(1); } if(argc > MAXAVGSIZE + 2) { printf("Two many input values\n"); exit(2); } host = argv[1]; averageprog_1( host, argc, argv); } -------------------------------------- ravg.c #include <rpc/rpc.h> #include "avg.h" #include <stdio.h> static double sum_avg; double * average_1(input_data *input, CLIENT *client) { double *dp = input->input_data.input_data_val; u_int i; sum_avg = 0; for(i=1;i<=input->input_data.input_data_len;i++) { sum_avg = sum_avg + *dp; dp++; } sum_avg = sum_avg / input->input_data.input_data_len; return(&sum_avg); } double * average_1_svc(input_data *input, struct svc_req *svc) { CLIENT *client; return(average_1(input,client)); } make BIN = ravg avg_svc GEN = avg_clnt.c avg_svc.c avg_xdr.c avg.h RPCCOM = rpcgen all: $(BIN) ravg: ravg.o avg_clnt.o avg_xdr.o $(CC) -o $@ ravg.o avg_clnt.o avg_xdr.o ravg.o: ravg.c avg.h $(CC) -g ravg.c -c avg_svc: avg_proc.o avg_svc.o avg_xdr.o $(CC) -o $@ avg_proc.o avg_svc.o avg_xdr.o<\n> avg_proc.o: avg_proc.c avg.h $(GEN): avg.x $(RPCCOM) avg.x clean cleanup: rm -f $(GEN) *.o $(BIN)



LinkBack URL
About LinkBacks


