Duangw

buffer管理

索引:

  1. buffer类型
  2. STRING型
  3. CARRAY型
  4. 分配buffer-tpalloc
  5. 重分配buffer-tprealloc
  6. 释放buffer-tpfree
  7. 查询buffer的类型-tptypes

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。

失败原因主要有:

 

5.重分配buffer-tprealloc

char *tprealloc(char *bufptr, long size);
成功返回新的缓冲区地址,失败返回NULL

参数说明:

bufptr:先前分配的buffer地址;

size:新的大小;

函数改变原来分配的空间的大小,并把原来的数据拷贝到新的缓冲区中。

失败原因主要有:

 

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子类型;

失败原因主要有: