RPC规范中结构内的二维数组定义不起作用
Posted
技术标签:
【中文标题】RPC规范中结构内的二维数组定义不起作用【英文标题】:Definition of 2D array inside struct in RPC Specification not working 【发布时间】:2019-03-21 14:24:49 【问题描述】:我正在尝试使用 RPC 实现 NFS。现在我的规范文件看起来像这样:(这是它的一个非常基本的版本:))
struct input
char command[20];
char arg[10][10];
int numargs;
;
struct lsresult
char arr[50][256];
;
program NFSPROG
version NFSVERSION
lsresult ls(input) = 1;
int cd(input) = 2;
int mkdir(input) = 3;
int mkfile(input) = 4;
= 1;
= 0x21111111;
当我尝试使用 rpcgen
编译此 Spec.x
时,我收到如下错误:
char arg[10][10];
^^^^^^^^^^^^^^
Spec.x, line 4: expected ';'
这可能是什么原因?我不能在 RPC 规范中声明一个 2D 数组吗? (当我尝试以这种方式声明变量时出现同样的错误:结构中的int a,b,c
!)
【问题讨论】:
但是我之前什么都没写过…… 仅在二维数组中特别显示错误...当我将其更改为一维时,错误不会出现! @PaulOgilvie...您的 rpcgen 命令是否没有显示此代码的错误? The RPC language 与 C相似,但它不是 C。除此之外,它确实似乎没有直接支持一维以上的数组。我自己对这门语言并不精通,所以有足够的信心写一个答案,但看起来你有一些可能的选择。 阅读 rpcgen 语言规范,它似乎不支持多维数组。见docs.oracle.com/cd/E19683-01/816-1435/6m7rrfn9k/index.html 【参考方案1】:在 rpcgen 的终端中,您需要一个字符串数组,而不是二维字符数组。首先,你必须 typedef 一个参数类型
typedef string arg<10>;
然后将这些参数组成一个数组:
struct input
string command<20>;
arg args[10];
int numargs;
;
lsresult 类似:
typedef string filename<50>;
struct lsresult
filename arr[256];
;
应该可以的
【讨论】:
以上是关于RPC规范中结构内的二维数组定义不起作用的主要内容,如果未能解决你的问题,请参考以下文章