rpcgen的簡單講解及例子程式

2021-09-11 13:46:34 字數 4597 閱讀 5060

rpcgen可以自動生成rpc伺服器程式的大多數**,它的輸入為乙個規格說明檔案,它的輸出為乙個c語言的源程式。規格檔案(*.x)包含常量、全域性資料型別以及遠端過程的宣告。rpcgen產生的**包含了實現客戶機和伺服器程式所需要的大部分源**。他包括引數整理、傳送rpc報文、引數和結果的外部資料表示以及本地資料表示的轉換等。不過在由rpcgen生成的原始檔中,沒有過程的具體實現,所以程式設計師必須要手工編輯這些檔案,實現這些過程。

檔名作用

makefile.file

該檔案用於編譯所有客戶機,伺服器**

file_clnt.c

該檔案包含client_stub,程式設計師一般不用修改

file_svc.c

該檔案包含server_stub,程式設計師一般不用修改

file.h

該檔案包含了從說明中產生的所有xdr型別

file_xdr.c

該檔案包含了客戶機和伺服器stub所需的xdr過濾器,程式設計師一般不用修改

file_server.c

如果生成此檔案,則該檔案包含遠端服務的stub

file_client.c

如果生成此檔案,則該檔案包含了骨架客戶機程式。

hades@hades:~/c_code$ rpcgen  --help 

usage: rpcgen infile

rpcgen [-abkclntm][-dname[=value]] [-i size] [-i [-k seconds]] [-y path] infile

rpcgen [-c | -h | -l | -m | -t | -sc | -ss | -sm] [-o outfile] [infile]

rpcgen [-s nettype]* [-o outfile] [infile]

rpcgen [-n netid]* [-o outfile] [infile]

options:

-a generate all files, including samples

-b backward compatibility mode (generates code for sunos 4.1)

-c generate xdr routines

-c ansi c mode

-dname[=value] define a symbol (same as #define)

-h generate header file

-i size size at which to start generating inline code

-i generate code for inetd support in server (for sunos 4.1)

-k seconds server exits after k seconds of inactivity

-l generate client side stubs

-l server errors will be printed to syslog

-m generate server side stubs

-m generate mt-safe code

-n netid generate server code that supports named netid

-n supports multiple arguments and call-by-value

-o outfile name of the output file

-s nettype generate server code that supports named nettype

-sc generate sample client code that uses remote procedures

-ss generate sample server code that defines remote procedures

-sm generate makefile template

-t generate rpc dispatch table

-t generate code to support rpc dispatch tables

-y path directory name to find c preprocessor (cpp)

-5 sysvr4 compatibility mode

--help give this help list

--version print program version

for bug reporting instructions, please see:

source/glibc/+bugs>.

複製**

部分選項的解釋:

rpcgen –c file.x生成file_xdr.c,file.h,makefile.file,file_svc.c和file_client.crpcgen –c –a file.x比上面多生成了2個檔案,file_server.c和file_client.c

建立規格檔案(test.x)

/* filename: test.x */

const add = 0;

const sub = 1;

const mul = 2;

const div = 3;

struct test

;program test_prog

= 2;

} = 0x20000001;

複製**

用 rpcgen –c –a test.x 生成7個檔案 makefile.test test_client.c test_clnt.c test.h test_server.c test_svc.c test_xdr.c

修改rpc_client.c :

/*

* this is sample code generated by rpcgen.

* these are only templates and you can use them

* as a guideline for developing your own functions.

*/#include "test.h"

void

test_prog_2(char *host)

printf("input the first number:");

scanf("%f", &test_proc_2_arg.arg1);

printf("input the second number:");

scanf("%f", &test_proc_2_arg.arg2);

/* -<<< add to test*/

#ifndef debug

clnt = clnt_create (host, test_prog, test_ver, "udp");

if (clnt == null)

#endif /* debug */

result_1 = test_proc_2(&test_proc_2_arg, clnt);

if (result_1 == (struct test *) null)

#ifndef debug

clnt_destroy (clnt);

#endif /* debug */

/* -<<< add to test*/

printf("the result is %.3f \n", result_1->result);

/* -<<< add to test*/

}int

main (int argc, char *ar**)

host = ar**[1];

test_prog_2 (host);

exit (0);

}複製**

修改test_server.c檔案:

/*

* this is sample code generated by rpcgen.

* these are only templates and you can use them

* as a guideline for developing your own functions.

*/#include "test.h"

struct test *

test_proc_2_svc(struct test *argp, struct svc_req *rqstp)

/* -<<< add to test*/

return &result;

}複製**

新增完成後執行:

make –f makefile.test

複製**

編譯生成檔案: test_client和test_server, 在命令列執行

$ ./test_server &

複製**

然後執行

$ ./math_client 127.0.0.1

複製**

按照提示輸入內容,測試rpc程式

rpcgen的簡單講解及例子程式

rpcgen 簡介 rpcgen 可以自動生成 rpc伺服器程式的大多數 它的輸入為乙個規格說明檔案,它的輸出為乙個 c語言的源程式。規格檔案 x 包含常量 全域性資料型別以及遠端過程的宣告。rpcgen 產生的 包含了實現客戶機和伺服器程式所需要的大部分源 他包括引數整理 傳送 rpc報文 引數和...

rpcgen的簡單講解及例子程式

rpcgen 簡介 rpcgen可以自動生成rpc伺服器程式的大多數 它的輸入為乙個規格說明檔案,它的輸出為乙個c語言的源程式。規格檔案 x 包含常量 全域性資料型別以及遠端過程的宣告。rpcgen產生的 包含了實現客戶機和伺服器程式所需要的大部分源 他包括引數整理 傳送rpc報文 引數和結果的外部...

android shape講解小全及例子

原文 例子 shape xmlns android android shape rectangle oval line ring 預設為rectangle corners shape rectangle 時使用,android radius integer 半徑,會被下邊的屬性覆蓋,預設為1dp,a...