1、基本数据类型
和 C 语言基本数据类型相似,包括 int、 unsigned int、enum、bool、long、float、double等,使用示例如下:
data.x 文件:
enum colors {RED = 2, YELLO = 3, BLUE = 5};
struct data {
int a;
unsigned int b;
enum colors c;
bool d;
long e;
float f;
double g;
};
rpcgen 生成的 data.h 文件:
enum colors {
RED = 2,
YELLO = 3,
BLUE = 5,
};
typedef enum colors colors;
struct data {
int a;
u_int b;
enum colors c;
bool_t d;
long e;
float f;
double g;
};
typedef struct data data;
2、opaque 数据
分为定长 opaque 数据、变长 opaque 数据,有点像 C 语言里面的字符数组,使用示例如下:
data.x 文件:
struct data {
opaque a[128]; // 定长 opaque 数据
opaque b<256>; // 变长 opaque 数据
opaque c<>; // 变长 opaque 数据
};
rpcgen 生成的 data.h 文件:
struct data {
char a[128];
struct {
u_int b_len;
char *b_val;
} b;
struct {
u_int c_len;
char *c_val;
} c;
};
typedef struct data data;
对于变长 opaque 数据而言,数据长度编码在数据块的最前面,占 4 个字节。变长 opaque 数据的最大长度由 “opaque data<m>” 中的 m 限定,若没有指定 m,则默认为 (2 ^ 32 - 1)。
3、string
类似于 C 语言中的字符串,和上面的 opaque 数据类似,同样有定长和变长的两个版本,使用示例如下:
data.x 文件:
struct data {
string a<256>;
string b<>;
};
rpcgen 生成的 data.h 文件:
struct data {
char *a;
char *b;
};
typedef struct data data;
与变长 opaque 数据类似,string 的长度由 "string data<m>" 中的 m 限定,若没有指定 m,则默认为 (2 ^ 32 - 1)。
3、数组
同样类似于 C 语言中的数组,支持定长和变长数组,使用示例如下:
data.x 文件:
struct data {
int a[128]; // 定长数组
int b<256>; // 变长数组
int c<>; // 变长数组
};
rpcgen 生成的 data.h 文件:
struct data {
int a[128];
struct {
u_int b_len;
int *b_val;
} b;
struct {
u_int c_len;
int *c_val;
} c;
};
typedef struct data data;
4、结构体
和 C 语言中的结构体类似,上述示例中一直在用结构体来演示其他数据类型,就不介绍了。
5、discriminated union
这个类型和 C 语言中的 union 有点像,但表现形式差别较大,仿佛是 C 语言中的一条 switch case 语句,但最终生成的类型还是和 union 相关,使用示例如下:
data.x 文件:
union union_type switch (int code) {
case 1:
int a;
case 2:
long b;
case 3:
char *c;
default:
void;
};
rpcgen 生成的 data.h 文件:
struct union_type {
int code;
union {
int a;
long b;
char *c;
} union_type_u;
};
typedef struct union_type union_type;
6、常量
和 C 语言中的常量类似,使用示例如下:
data. x 文件:
const month = 12;
rpcgen 生成的 data.h 文件:
#define month 12