Удаленный вызов процедуры: как объявить две версии одной и той же программы в файле XDR - PullRequest
1 голос
/ 14 апреля 2011

Я пишу программу, которая делает 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. Большое спасибо за чтение моего поста. Пожалуйста, помогите мне. Заранее спасибо.

1 Ответ

2 голосов
/ 14 апреля 2011

«Имя версии не может встречаться более одного раза в пределах определения программы. Также не может быть номер версии более одного раза в пределах определения программы».- RFC 1057

Вам просто нужно дать строке версии разные имена, например:

program MSGPROG{

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

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

} = 0x2000001;
...