buffer管理
索引:
1.buffer类型
在tuxedo的通讯中使用的缓冲区都要使用一套自己API来生成和释放。buffer类型有CARRAY、STRING、FML、FML32、VIEW和VIEW32等。
类型 | 说明 |
---|---|
STRING | 字符串,以null结尾 |
CARRAY | 有长度的字节流 |
X_OCTET | |
FML | fielded buffers |
FML32 | |
VIEW | C结构 |
VIEW32 | |
X_C_TYPE | |
X_COMMON |
以上类型中,只有VIEW系列类型是有子类型(subtype)的。FML和VIEW在后面会有详细的说明。
2.STRING型
STRING类型主要用于处理变长的文本数据;
必须以null结尾;
STRING要在配置文件的MACHINES部分用TYPE配置;
STRING类型只由字符组成,在结构不同或使用不同的字符集的机器之前传输时,自动进行XDR encode/decode处理。
3.CARRAY型
CARRAY类型用于与机器无关的数据;
该类型要指定长度,数据中可以包含null数据;
tuxedo不关心数据的内容,不进行XDR encode/decode转换。
4.分配buffer-tpalloc
char *tpalloc(char *type, char *subtype, long size); 成功返回分配的缓冲区首地址,失败返回NULL
参数说明:
type:buffer类型;
subtype:子类型,没有子类型的填NULL;
size:分配的缓冲区大小;
buffer类型是CARRAY、STRING、FML、FML32、VIEW和VIEW32。
失败原因主要有:
- 参数错;
- 协议错,如之前尚未调用tpinit;
- 操作系统错;
- tuxedo底层错。
5.重分配buffer-tprealloc
char *tprealloc(char *bufptr, long size); 成功返回新的缓冲区地址,失败返回NULL
参数说明:
bufptr:先前分配的buffer地址;
size:新的大小;
函数改变原来分配的空间的大小,并把原来的数据拷贝到新的缓冲区中。
失败原因主要有:
- 无效的原指针;
- 协议错,如之前尚未调用tpinit;
- 操作系统错;
- tuxedo底层错。
6.释放buffer-tpfree
void tpfree(char *bufptr);
参数说明:
bufptr:分配的buffer地址;
函数没有返回值,不返回任何错误,tperrno被设置为0。
7.查询buffer的类型-tptypes
long tptypes(char *bufptr, char *type, char *subtype); 函数成功返回buffer的长度,失败返回-1
参数说明:
bufptr:buffer地址;
type:成功返回的buffer类型;
subtype:成功返回的buffer子类型;
失败原因主要有:
- 无效的原指针;
- 协议错,如之前尚未调用tpinit;
- 操作系统错;
- tuxedo底层错。