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...