gpt4 book ai didi

c - rpcgen 添加 _svc 扩展

转载 作者:太空宇宙 更新时间:2023-11-04 10:42:02 27 4
gpt4 key购买 nike

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

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

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 扩展名的函数案例:

case STRLEN:
xdr_argument = xdr_wrapstring;
xdr_result = xdr_int;
local = (char *(*)()) strlen_1_svc; //<--_SVC
break;

当我在实现功能后尝试编译服务器时

int * strlen_1(char **, CLIENT *);

编译器引发该错误:

"_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;//没有_svc程序将编译成功。

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


P.S 同样的错误也适用于 square 和 num_of_dev 函数,例如只给出了 strlen。

谢谢!

最佳答案

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

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

您的客户端调用 strlen_1 函数。 rpcgen + RPC 库完成所有中间工作 - 它为客户端使用的 strlen_1 生成代码,该代码将序列化数据并将其传输到服务器,事件循环将调用分派(dispatch)到您的代码中strlen_1_svc 函数。

关于c - rpcgen 添加 _svc 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34694896/

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