gpt4 book ai didi

c - 远程过程调用 : how to declare two versions of same program in a XDR file

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:29:21 28 4
gpt4 key购买 nike

我正在编写一个程序,该程序使 RPC 打印一条消息,该消息作为参数发送到远程函数。远程函数不应返回任何内容,但出于好奇,我将远程函数设计为返回整数。

无论如何,一切正常,我能够远程打印消息。现在我正在尝试在 XDR 文件中创建一个程序的两个版本(只是好奇!!!)但它对我不起作用。

这是我的新 XDR 文件

anirudh@anirudh-Aspire-5920:~/Documents/C/DS/RPC$ cat spec.x 
program MSGPROG{

version PRINTMSGVERSION{
int PRINTMSG(string) = 1;
} = 1;

version PRINTMSGVERSION{
int PRINTMSG(string) = 1;
} = 2;

} = 0x2000001;

这是服务器代码:

anirudh@anirudh-Aspire-5920:~/Documents/C/DS/RPC$ cat server.c 
#include<stdio.h>
#include "spec.h"

int *printmsg_1_svc(char **msg,struct svc_req * sr){
static int ret;

printf("version = 1--%s\n",*msg);
ret = 1;
return &ret;
}

int *printmsg_2_svc(char **msg,struct svc_req * sr){
static int ret;

printf("version = 2--%s\n",*msg);
ret = 1;
return &ret;
}

以下是我在编译时遇到的错误:

anirudh@anirudh-Aspire-5920:~/Documents/C/DS/RPC$ rpcgen -C spec.x
anirudh@anirudh-Aspire-5920:~/Documents/C/DS/RPC$ gcc server.c spec_svc.c -o ani_server -lnsl
In file included from server.c:2:
spec.h:32: warning: "PRINTMSGVERSION" redefined
spec.h:18: note: this is the location of the previous definition
In file included from spec_svc.c:6:
spec.h:32: warning: "PRINTMSGVERSION" redefined
spec.h:18: note: this is the location of the previous definition

所以错误来了,因为我无法弄清楚如何在 XDR 文件中声明一个程序的两个版本。非常感谢您阅读我的帖子。请帮帮我。提前致谢。

最佳答案

“版本名称在一个范围内不能出现多次 程序定义。版本号也不能出现多次 在程序定义的范围内。”- RFC 1057

您只需为版本字符串指定不同的名称,例如:

program MSGPROG{

version PRINTMSGVERSION_1 {
int PRINTMSG(string) = 1;
} = 1;

version PRINTMSGVERSION_2{
int PRINTMSG(string) = 1;
} = 2;

} = 0x2000001;

关于c - 远程过程调用 : how to declare two versions of same program in a XDR file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5661965/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com