2013-07-06 119 views
0

我用rpcgen創建了這兩個文件(.h和.c)和我自己的兩個結構(環境是Linux,編程語言是C)。XDR編碼功能

兩個結構是這些低於(這是.h文件):

/* 
* Please do not edit this file. 
* It was generated using rpcgen. 
*/ 

#ifndef _XDRTYPES_H_RPCGEN 
#define _XDRTYPES_H_RPCGEN 

#include <rpc/rpc.h> 


#ifdef __cplusplus 
extern "C" { 
#endif 


struct Request { 
    struct { 
     u_int data_len; 
     float *data_val; 
    } data; 
    bool_t last; 
}; 
typedef struct Request Request; 

struct Response { 
    bool_t error; 
    float result; 
}; 
typedef struct Response Response; 

/* the xdr functions */ 

#if defined(__STDC__) || defined(__cplusplus) 
extern bool_t xdr_Request (XDR *, Request*); 
extern bool_t xdr_Response (XDR *, Response*); 

#else /* K&R C */ 
extern bool_t xdr_Request(); 
extern bool_t xdr_Response(); 

#endif /* K&R C */ 

#ifdef __cplusplus 
} 
#endif 

#endif /* !_XDRTYPES_H_RPCGEN */ 

在我主我打電話#include <rpc/rpc.h>#include "xdrtypes.h"。後來我想請求消息發送到服務器的套接字(s是文件描述符s = socket(...)):

stream_socket_w = fdopen(s, "w"); 
xdrstdio_create(&xdrs_w, stream_socket_w, XDR_ENCODE); 

x.data.data_len = 5; 
x.last = 1; 
x.data.data_val[0] = 5.3; 
x.data.data_val[1] = 2.7; 
x.data.data_val[2] = 8.4; 
x.data.data_val[3] = 2.9; 
x.data.data_val[4] = 1.7; 

xdr_Request(&xdrs_w, &x); 
fflush(stream_socket_w); 

的問題是,在該行xdr_Request(&xdrs_w, &x)執行停止,我獲得「Segmentation Fault」。大家可以幫助我嗎?非常感謝你。

+0

使用'gcc -Wall -g'編譯並使用'gdb'調試器....測試'fdopen'的結果 –

+0

使用gcc -Wall -G完成並且不會出現任何問題。問題是xdr_Request,但在.h文件中似乎沒有問題 – user2467899

+0

有extern bool_t xdr_Request(XDR *,Request *);在主要我必須聲明一些東西,因爲在.h文件中有extern? – user2467899

回答

2

你是否爲data_val分配內存? x.data.data_val = malloc(x.data.data_len * sizeof(float)); 哪裏定義了xdr_Request函數?你有它的API嗎?