首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rpcgen添加_svc扩展

rpcgen添加_svc扩展
EN

Stack Overflow用户
提问于 2016-01-09 14:49:05
回答 2查看 184关注 0票数 0

使用server-client创建一个简单的rpcgen程序。

我正在编写这个.x文件:

代码语言:javascript
复制
program REMOTE_PROG {
    version MSG_RCV {
        int STRLEN(string)      = 1;
        double SQUARE(double *) = 2;
        int NUM_OF_DEV(int *)   = 3;

    } = 1;
} = 99;

使用rpcgen file.x ->执行将生成file_svc.c

file_svc.c文件中,由于某种原因,它生成每个函数用_svc扩展名为:

代码语言:javascript
复制
case STRLEN:
    xdr_argument = xdr_wrapstring;
    xdr_result = xdr_int;
    local = (char *(*)()) strlen_1_svc; //<--_SVC
    break;

在实现了这些函数之后,当我试图编译服务器时

代码语言:javascript
复制
int * strlen_1(char **, CLIENT *);

编译器将引发此错误:

代码语言:javascript
复制
"_strlen_1_svc", referenced from:
  _remote_prog_1 in file_svc-8501b7.o
ld: symbol(s) not found for architecture x86_64

但是如果我删除自动生成的_svc扩展,local = (char *(*)()) strlen_1; //no _svc程序将成功编译。

为什么会发生这种事?为什么rpcgen将_svc扩展添加到函数中,而当我删除_svc?时,我是否做错了什么?

同样的误差也适用于平方函数和num_of_dev函数,仅给出了一个例子。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-09 15:03:13

这是惯例,_svc是服务的缩写。

您的服务器需要实现服务函数,即strlen_1_svc函数。

客户端调用strlen_1函数。rpcgen + RPC库执行所有中间操作--它为客户端使用的strlen_1生成代码,该代码将序列化数据并将其传输到服务器,在服务器中,事件循环将调用strlen_1_svc函数中的代码。

票数 1
EN

Stack Overflow用户

发布于 2016-09-02 07:06:59

执行rpcgen ex7.x之后,您应该已经创建了客户机和服务器存根、ex7_clnt.cex7_svc.c以及一个头文件ex7.h

在头文件中,您将声明两个函数strlen_1strlen_1_svc,它们必须有不同的名称,因为它们是不同的函数:第一个在客户端,第二个在服务器端通过RPC调用调用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34694896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档