簡體   English   中英

了解XDR規范以創建* .x文件

[英]Understanding XDR specification to create a *.x file

我一直在瀏覽Internet上的幾個網站,實際上想知道我們如何在.x 文件中編寫規范以在中生成等效功能。 RPC的.c文件。 我訪問的每個站點都建議在* .x文件中使用以下類型的規范:

program ADD_PROG { 
    version ADD_VERS { 
        int ADD(intpair) = 1; 
    } = 1; 
} = 0x23451111;

因此,為了實際理解,我從一個名為ganglia的開源項目中獲得了gm_protocol.x ,並使用rpcgen生成了等效的C源代碼( gm_protocol_xdr.c )和C頭文件( gm_protocol.h )。

[rohit@ganglia-server rpc]$ rpcgen -C gm_protocol.x 
[rohit@ganglia-server rpc]$ 
[rohit@ganglia-server rpc]$ ll
total 24
-rw-rw-r-- 1 rohit rohit 5786 Oct 28 17:52 gm_protocol.h
-rw-rw-r-- 1 rohit rohit 3485 Oct 28 15:04 gm_protocol.x
-rw-rw-r-- 1 rohit rohit 8213 Oct 28 17:52 gm_protocol_xdr.c

令我驚訝的是,據我了解和了解,gm_protocol.x不包含上面代碼所示的任何此類RPC規范,但仍會在文件gm_protocol_xdr.c中生成太多函數。

幾乎可以肯定,我無法理解XDR規范,因為我咨詢了錯誤的來源或它們已過時。 我找不到任何可以解釋生成函數方法的教程(盡管我找到了生成struct,enum,union等的規范)。

請幫助學習這些規格。

通常,從.x文件中,您會生成三個“組”的代碼:消息xdr編碼器/解碼器功能,客戶端存根和服務器存根(當然,您也可以手工完成,但是要正確處理它還需要做很多工作)。 使用-a選項運行rpcgen也會生成客戶端,服務器信息和示例實現。 首先嘗試使用一個簡單的示例:

program STRLEN {
  version STRLENVERS {
    int strlen(string) = 1;
  } = 1;
} = 117;

規范program是RPCL但XDR語言的一部分。 如果將上面的規格放在test.x文件中,然后使用rpcgen -C test.x運行它,那么他/她將得到

test.h,test_svc.c,test_clnt.c

如果不需要任何服務器或客戶機存根,而只需要XDR的編碼器和解碼器功能,則文件gm_protocol.x中的每個規范(例如枚舉,結構,聯合等)都將生成為它們在gm_protocol中基於C的等效聲明。 h和它們相應的XDR編碼器和解碼器功能將在gm_protocol_xdr.c中生成,這是問題中指定的情況。

運行rpcgen -a gm_protocol.x會生成gm_protocol_svc.cgm_protocol_clnt.c而沒有任何功能。

以下是一些XDR規范:

在此處輸入圖片說明

檢查舊的SUN文檔http://www.shrubbery.net/solaris9ab/SUNWdev/ONCDG/toc.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM