我正在构建基于RPC的服务器 - 客户端应用程序。
我有struct
名为event
,其中包含:
int type_id
long int time
我在服务器中有一个返回(event*
)的函数:
event *
log_1_svc(event *argp, struct svc_req *rqstp)
{
static event* result;
result = (struct event*)malloc (3 * sizeof (struct event));
while (i <3)
{
result[i].type_id = i;
result[i].time = i;
i++;
}
return &result
}
我想要的是使用此指针在客户端上接收结果。
以下是客户网站上的代码:
log_prog_1(char *host,int client_type,int type_id,long int time)
{
event *result_1;
result_1 = log_1(&log_1_arg, clnt); // this calls the function in server and gurantee that the result is returned an address to pointer
int i =0;
while (i<3)
{
printf ("Type: %d\n",result_1[i].type_id);
printf ("Time: %ld\n",result_1[i].time);
[CODE][/CODE]
i++;
}
}
此代码有效,但似乎它返回的地址不是值(客户端终端中显示的数字与服务器终端中的数字不同)。
我试图让服务器返回result
:
return result;
不是结果的地址(如前所述):
return &result;
虽然有效,但只有第一项在客户终端正确打印,其他两项是0。
请提前给我一个解决方案并提前致谢:)
答案 0 :(得分:0)
一些评论:
为了解决你的问题,我会把我的赌注押在2上。
答案 1 :(得分:0)
我认为最好的方法是将指向内存的指针传递给要填充的三个struct event
的函数。
即
void log_1_svc(event *argp, struct svc_req *rqstp, struct event *result)
这增加了一个额外的好处,即调用者可以只使用堆栈并避免任何内存泄漏。