rpcgen 簡介
rpcgen
可以自動生成
rpc伺服器程式的大多數**,它的輸入為乙個規格說明檔案,它的輸出為乙個
c語言的源程式。規格檔案(
*.x)包含常量、全域性資料型別以及遠端過程的宣告。
rpcgen
產生的**包含了實現客戶機和伺服器程式所需要的大部分源**。他包括引數整理、傳送
rpc報文、引數和結果的外部資料表示以及本地資料表示的轉換等。不過在由
rpcgen
生成的原始檔中,沒有過程的具體實現,所以程式設計師必須要手工編輯這些檔案,實現這些過程。
rpc自動生成的檔案
檔名
作用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
如果生成此檔案,則該檔案包含了骨架客戶機程式。
rpcgen
的部分選項
-a
生成所有源程式,包括客戶機和伺服器源程式。
-c 使用
ansi c
標準生成編碼。
-c 生成
xdr轉碼
c程式。(
file_xdr.c
)。-l
生成客戶機
stubs
。(file_clnt.c
)-m
生成伺服器
stubs
,但是不生成
main
函式。(
file_svc.c
)-s rpcgen –c –s tcp file.x
,生成伺服器
stubs
,用tcp
協議,同時生成了
main
函式。(
file_svc.c
)-h
生成標頭檔案。
-sc
生成骨架客戶機程式,(
file_client.c
),生成後還需要手動新增**。
-ss
生成伺服器程式,(
file_server.c
),生成後還需要手動新增**。
rpcgen –cfile.x
生成file_xdr.c,file.h,makefile.file,file_svc.c
和file_client.c
rpcgen –c –a file.x
比上面多生成了
2個檔案,
file_server.c
和file_client.c
rpcgen
示例程式
規格檔案(
math.x)
/* filename: math.x */
const add = 0;
const sub = 1;
const mul = 2;
const div = 3;
struct math
;
program math_prog
= 2;
} = 0x20000001;
用
rpcgen –c –a math.x 生成7
個檔案,
math.h
、math_xdr.c
、math_svc.c
、math_clnt.c
、makefile.math
、math_client.c
、math_server.c。在
math_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 "math.h"
void math_prog_2(char *host)
printf("input the first number:");
scanf("%f", &math_proc_2_arg.arg1);
printf("input the second number:");
scanf("%f", &math_proc_2_arg.arg2);
/* <-
2006/07/04
dongyy add */
#ifndefdebug
clnt = clnt_create (host, math_prog, math_ver, "udp");
if (clnt == null)
#endif/* debug */
result_1 = math_proc_2(&math_proc_2_arg, clnt);
if (result_1 == (struct math *) null)
#ifndefdebug
clnt_destroy (clnt);
#endif/* debug */
/*
2006/07/04
dongyy add -> */
printf("the result is %
.3f
/n", result_1->result);
/* <-
2006/07/04
dongyy add */
}
int main (int argc, char *argv)
host = argv[1];
math_prog_2 (host);
exit (0);
}
在
math_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 "math.h"
struct math *
math_proc_2_svc(struct math *argp, struct svc_req *rqstp)
/* <-
2006/07/04
dongyy add */
return &result;
}
紅色字型部分為用
rpcgen
生成**後,手動新增的**。
新增完後,執行
make –f makefile.math
編譯生成
math_client
和math_server
,在命令列執行
math_server &
,然後執行
math_client 127.0.0.1
,按照提示輸入內容就
ok了。
參考書籍《
linux c
高階程式設計師指南》
rpcgen的簡單講解及例子程式
rpcgen 簡介 rpcgen可以自動生成rpc伺服器程式的大多數 它的輸入為乙個規格說明檔案,它的輸出為乙個c語言的源程式。規格檔案 x 包含常量 全域性資料型別以及遠端過程的宣告。rpcgen產生的 包含了實現客戶機和伺服器程式所需要的大部分源 他包括引數整理 傳送rpc報文 引數和結果的外部...
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...