19.1 DMASMAPI 接口
DMASMAPI 是连接 DMASMSVR 执行操作的接口,所有使用 DMASM 文件系统的程序都使用 DMASMAPI 接口连接 DMASMSVR。
返回值分为三种类型:正数,0 和负数。0 表示正常;正数为警告信息;负数为错误信息,对应的错误码请参考 19.1.3 错误码汇编。
19.1.1 DMASMAPI 接口说明
DMASMAPI 提供的接口如下:
1. dmasm_sys_init
函数原型:
ASMRETURN
dmasm_sys_init(
sdbyte* err_desc,
udint4* err_len,
udint4 char_code,
udint4 lang_id
)
功能说明:
环境初始化接口。使用 ASMAPI 接口,必须第一个调用 dmasm_sys_init 接口。
参数说明:
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
char_code:输入参数,编码。0:PG_INVALID_CODE;1:PG_UTF8;2:PG_GBK;3:PG_BIG5;4:PG_ISO_8859_9;5:PG_EUC_JP;6:PG_EUC_KR;7:PG_KOI8R;8:PG_ISO_8859_1;9:PG_SQL_ASCII;10:PG_GB18030;11:PG_ISO_8859_11;12:PG_UTF16。-1 表示使用默认编码。
lang_id :输入参数,语言。0:中文;1:英文;2:繁体中文。-1 表示使用默认语言。
2. dmasm_sys_deinit
函数原型:
void
dmasm_sys_deinit()
功能说明:
环境销毁接口。使用 ASMAPI 接口结束时,调用 dmasm_sys_deinit 销毁资源。
3. dmasm_alloc_con
函数原型:
ASMRETURN
dmasm_alloc_con(
asmcon_handle* con,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
申请并初始化连接句柄。返回申请的连接句柄。
参数说明:
con:输入参数,连接句柄。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
4. dmasm_free_con
函数原型:
void
dmasm_free_con(
asmcon_handle con_in
)
功能说明:
释放连接句柄。
参数说明:
con_in:输入参数,连接句柄。
5. dmasm_connect
函数原型:
ASMRETURN
dmasm_connect(
asmcon_handle con_in,
sdbyte* username,
sdbyte* password,
sdbyte* hostname,
udint2 portnum,
asmbool* con_is_local,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
登录接口。ASMSVR 允许本地连接和远程连接,但是 dmserver 仅允许本地连接,依据 con_is_local 判断是否远程连接。
参数说明:
con_in:输入参数,连接句柄。
username:输入参数,用户名。
password:输入参数,密码。
hostname:输入参数,主机 ip 或主机名。
portnum:输入参数,主机监听端口号。
con_is_local:输出参数,标识远程或本地登录。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
6. dmasm_close_con
函数原型:
void
dmasm_close_con(
asmcon_handle con_in
)
功能说明:
关闭连接。关闭连接句柄,释放资源。
参数说明:
conn_in:输入参数,连接句柄。
7. dmasm_get_n_group
函数原型:
ASMRETURN
dmasm_get_n_group(
asmcon_handle conn_in,
udint2* num,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
获取 ASM Disk Group 个数。获取有多少个磁盘组。
参数说明:
conn_in:输入参数,连接句柄。
num:输出参数,磁盘组个数。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
8. dmasm_get_group_id_arr
函数原型:
ASMRETURN
dmasm_get_group_id_arr(
asmcon_handle con_in,
udint2* id_arr,
udint2 arr_size,
udint2* num,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
获取 ASM Disk Group ID 数组。配合 dmasm_get_n_group 使用,获取所有 Disk Group ID。
参数说明:
conn_in:输入参数,连接句柄。
id_arr:输出参数,磁盘 ID 数组。
arr_size:输入参数,数组最大长度。
num:输出参数,返回数组长度。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
9. dmasm_get_disk_id_arr_by_group
函数原型:
ASMRETURN
dmasm_get_disk_id_arr_by_group(
asmcon_handle con_in,
udint2 group_id,
udint2* id_arr,
udint2 arr_size,
udint2* n_disk,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
获取磁盘组内磁盘 ID 数组。根据磁盘组 ID 获取磁盘组内包含的所有磁盘 ID。
参数说明:
conn_in:输入参数,连接句柄。
group_id:输入参数,磁盘组 ID。
id_arr:输出参数,磁盘 ID 数组。
arr_size:输入参数,数组最大长度。
n_disk:输出参数,返回数组长度。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
10. dmasm_get_disk_info
函数原型:
ASMRETURN
dmasm_get_disk_info(
asmcon_handle conn_in,
udint2 group_id,
udint4 disk_id,
sdbyte* path,
udint2 path_buflen,
sdbyte* name,
udint2 name_buflen,
udint4* size,
udint4* free_auno,
sdbyte* create_time,
sdbyte* modify_time,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
获取 ASM 磁盘详细信息。根据磁盘组 ID 和磁盘 ID 获取 ASM 磁盘详细信息。
参数说明:
conn_in:输入参数,连接句柄。
group_id:输入参数,磁盘组 ID。
disk_id:输入参数,磁盘 ID。
path:输出参数,磁盘路径。
path_buflen:输入参数,path 缓冲区长度。
name:输出参数,磁盘名称。
name_buflen:输入参数,name 缓冲区长度。
size:输出参数,磁盘大小,单位 MB。
free_auno:输出参数,最大 au 号。
create_time:输出参数,磁盘创建时间。
modify_time:输出参数,磁盘最近一次修改时间。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
11. dmasm_create_diskgroup
函数原型:
ASMRETURN
dmasm_create_diskgroup(
asmcon_handle conn_in,
sdbyte* group_name,
sdbyte* disk_path_in,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
创建 ASM Disk Group。使用 disk_path 所指的 ASM 磁盘创建 ASM 磁盘组。
参数说明:
conn_in:输入参数,连接句柄。
group_name:输入参数,磁盘组名。
disk_path_in:输入参数,磁盘路径。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
12. dmasm_add_disk_to_diskgroup
函数原型:
ASMRETURN
dmasm_add_disk_to_diskgroup(
asmcon_handle conn_in,
sdbyte* group_name,
sdbyte* disk_path_in,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
磁盘组增加磁盘。往磁盘组增加 ASM 磁盘。
参数说明:
conn_in:输入参数,连接句柄。
group_name:输入参数,磁盘组名。
disk_path_in:输入参数,磁盘路径。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
13. dmasm_drop_diskgroup_by_name
函数原型:
ASMRETURN
dmasm_drop_diskgroup_by_name(
asmcon_handle conn_in,
sdbyte* group_name,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
删除磁盘组。ASM 文件系统不支持单独删除 ASM 磁盘,只能删除整个 ASM 磁盘组
参数说明:
conn_in:输入参数,连接句柄。
group_name:输入参数,磁盘组名。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
14. dmasm_file_create
函数原型:
ASMRETURN
dmasm_file_create(
asmcon_handle conn_in,
asmbool p_flag,
sdbyte* filepath_in,
udint8 filesize,
asm_fhandle_t* fil_handle,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
创建 ASM 文件。在 ASM 文件系统中创建 ASM 文件,如果文件父亲目录不存在,并且 p_flag 为 TRUE 的情况,会自动创建父目录,否则会报错。
参数说明:
conn_in:输入参数,连接句柄。
p_flag:输入参数,创建父目录标记。
filepath_in:输入参数,文件路径。
filesize:输入参数,文件大小,单位 Byte。
fil_handle:输出参数,文件句柄。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
15. dmasm_file_open
函数原型:
ASMRETURN
dmasm_file_open(
asmcon_handle conn_in,
sdbyte* filepath_in,
asm_fhandle_t* fhandle,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
打开 ASM 文件,获取 ASM 文件句柄。已经打开的文件,不能被删除。
参数说明:
conn_in:输入参数,连接句柄。
filepath_in:输入参数,文件路径。
fhandle:输入参数,文件句柄。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
16. dmasm_file_trunc
函数原型:
ASMRETURN
dmasm_file_trunc(
asmcon_handle conn_in,
asm_fhandle_t fhandle,
udint8 truncate_size,
udint8* real_size,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
截断 ASM 文件。将 ASM 文件截断到 truncate_size,如果 truncate_size 小于文件大小,文件会被截断到 truncate_size;如果 truncate_size 大于文件大小,文件大小不变,接口返回 EC_SUCCESS。
参数说明:
conn_in:输入参数,连接句柄。
fhandle:输入参数,文件句柄。
truncate_size:输入参数,截断后的大小,单位 Byte。
real_size:输出参数,执行后实际大小,单位 Byte。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
17. dmasm_file_extend
函数原型:
ASMRETURN
dmasm_file_extend(
asmcon_handle conn_in,
asm_fhandle_t fhandle,
udint8 offset,
udint8 extend_size,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
扩展 ASM 文件。将文件从 offset 偏移处,扩展 extent_size 大小,最终实际大小为 offset+extent_size。如果 offset+extend_size 大于文件大小,文件会被扩展到 offset+extend_size 大小;如果 offset+extend_size 小于文件大小,直接返回成功。
参数说明:
conn_in:输入参数,连接句柄。
fhandle:输入参数,文件句柄。
offset:输入参数,起始偏移。
extend_size:输入参数,扩展大小。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
18. dmasm_file_close
函数原型:
void
dmasm_file_close(
asmcon_handle conn_in,
asm_fhandle_t fhandle
)
功能说明:
关闭 ASM 文件。关闭打开的 ASM 文件
参数说明:
conn_in:输入参数,连接句柄。
fhandle:输入参数,文件句柄。
19. dmasm_file_delete
函数原型:
ASMRETURN
dmasm_file_delete(
asmcon_handle conn_in,
sdbyte* filepath_in,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
删除 ASM 文件。删除 ASM 文件,正在被使用的 ASM 文件不能被删除。
参数说明:
conn_in:输入参数,连接句柄。
filepath_in:输入参数,文件路径。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
20. dmasm_file_read_by_offset
函数原型:
ASMRETURN
dmasm_file_read_by_offset(
asmcon_handle conn_in,
asm_fhandle_t fhandle,
udint8 offset,
sdbyte* buffer,
udint4 bytes_to_read,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
从 ASM 文件读取数据。从 ASM 文件 offset 偏移读取 bytes_to_read 大小的内容到缓冲区 buffer,调用者保证缓冲区够用。因为裸设备读写限制,offset, buffer, bytes_to_read 都必须能被 512 整除,否则会报错。
参数说明:
conn_in:输入参数,连接句柄。
fhandle:输入参数,文件句柄。
offset:输入参数,起始偏移。
buffer:输入参数,缓冲区。
bytes_to_read:输入参数,读取数据大小,单位 Byte。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
21. dmasm_file_read_by_offset_normal
函数原型:
ASMRETURN
dmasm_file_read_by_offset_normal(
asmcon_handle conn_in,
asm_fhandle_t fhandle,
udint8 offset,
sdbyte* buffer,
udint4 bytes_to_read,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
从 ASM 文件读取数据。从 ASM 文件 offset 偏移读取 bytes_to_read 大小的内容到缓冲区 buffer,调用者保证缓冲区够用。该接口支持 offset,buffer,bytes_to_read 不是 512 整数倍,但是性能比 dmasm_file_read_by_offset 慢。
参数说明:
conn_in:输入参数,连接句柄。
fhandle:输入参数,文件句柄。
offset:输入参数,起始偏移。
buffer:输入参数,缓冲区。
bytes_to_read:输入参数,写取数据大小,单位 Byte。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
22. dmasm_file_write_by_offset
函数原型:
ASMRETURN
dmasm_file_write_by_offset(
asmcon_handle conn_in,
asm_fhandle_t fhandle,
udint8 offset,
sdbyte* buffer,
udint4 bytes_to_write,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
将数据写入 ASM 文件。将缓冲区中的内容写入 ASM 文件,从 offset 偏移开始。因为裸设备读写限制,offset,buffer 地址,bytes_to_write 都必须能被 512 整除。
参数说明:
conn_in:输入参数,连接句柄。
fhandle:输入参数,文件句柄。
offset:输入参数,起始偏移。
buffer:输入参数,缓冲区。
bytes_to_write:输入参数,写数据大小,单位 Byte。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
23. dmasm_file_write_by_offset_normal
函数原型:
ASMRETURN
dmasm_file_write_by_offset_normal(
asmcon_handle conn_in,
asm_fhandle_t fhandle,
udint8 offset,
sdbyte* buffer,
udint4 bytes_to_write,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
将数据写入 ASM 文件。将缓冲区中的内容写入 ASM 文件,从 offset 偏移开始。该接口支持 offset,buffer,bytes_to_write 不是 512 倍数,但是性能比 dmasm_file_write_by_offset 慢。
参数说明:
conn_in:输入参数,连接句柄。
fhandle:输入参数,文件句柄。
offset:输入参数,起始偏移。
buffer:输入参数,缓冲区。
bytes_to_write:输入参数,写数据大小,单位 Byte。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
24. dmasm_file_copy
函数原型:
ASMRETURN
dmasm_file_copy(
asmcon_handle conn_in,
sdbyte* source_in,
sdbyte* dest_in,
asmbool bOverwriteIfExists,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
文件拷贝操作。支持 ASM 文件拷贝到 ASM 文件;ASM 文件拷贝到普通文件系统文件;普通文件系统文件拷贝到 ASM 文件系统;不支持普通文件拷贝到普通文件。bOverwriteIfExists:0 或者 NULL 表示不覆盖,其他非 0 值表示覆盖。
参数说明:
conn_in:输入参数,连接句柄。
source_in:输入参数,源文件路径。必须是全路径,不能是相对路径。
dest_in:输入参数,目标文件路径。必须是全路径,不能是相对路径。
bOverwriteIfExists:输入参数,如果目标存在是否删除。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
25. dmasm_dir_create
函数原型:
ASMRETURN
dmasm_dir_create(
asmcon_handle conn_in,
asmbool p_flag,
sdbyte* fdir_in,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
创建目录。ASM 文件系统创建目录,当 p_flag=TRUE 时会级联创建父目录,否则父目录不存在会报错。
参数说明:
conn_in:输入参数,连接句柄。
p_flag:输入参数,是否级联创建父目录。
fdir_in:输入参数,目录路径。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
26. dmasm_dir_delete
函数原型:
ASMRETURN
dmasm_dir_delete(
asmcon_handle conn_in,
sdbyte* fdir_in,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
删除目录,以及目录下面所有的文件。
参数说明:
conn_in:输入参数,连接句柄。
fdir_in:输入参数,目录路径。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
27. dmasm_get_file_num_by_group
函数原型:
ASMRETURN
dmasm_get_file_num_by_group(
asmcon_handle conn_in,
udint2 group_id,
udint4* num,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
获取磁盘组内总的文件个数。根据磁盘组 ID 获取总的文件个数,包括文件和目录。
参数说明:
conn_in:输入参数,连接句柄。
group_id:输入参数,磁盘组的 ID 。
num :输出参数,文件的个数。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
28. dmasm_get_extent_size
函数原型:
ASMRETURN
dmasm_get_extent_size(
asmcon_handle conn_in,
udint4* ex_size,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
获取 ASM 文件系统簇大小。获取 ASM 文件系统簇大小。
参数说明:
conn_in:输入参数,连接句柄。
ex_size:输出参数,簇的大小,包括几个 AU。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
29. dmasm_get_file_info
函数原型:
ASMRETURN
dmasm_get_file_info(
asmcon_handle conn_in,
asm_fhandle_t file_id,
ASM_FILE_ATTR* fattr_out,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
获取 ASM 文件详细信息。
ASM_FILE_ATTR 包括:
type:目录标记,整型。1 表示文件,2 表示目录。
name:文件名称,字符型。
full_path:完整路径,字符型。
size:文件大小,整型,单位 Byte。目录忽略此字段。
c_time:创建时间,time_t 类型。
m_time:修改时间,time_t 类型。
group_id:所在磁盘组编号,整型。
disk_id:inode 项所在磁盘 ID,整型。
disk_auno:inode 项所在磁盘 AU 编号,整型。
offset:inode 项 AU 偏移,整型。
参数说明:
conn_in:输入参数,连接句柄。
file_id:输入参数,打开的文件句柄。
fattr_out:输出参数,文件属性结构。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
30. dmasm_file_data_init_normal
函数原型:
ASMRETURN
dmasm_file_data_init_normal(
asmcon_handle conn_in,
asm_fhandle_t fhandle,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
文件清零接口。ASMSVR 只提供创建文件,分配空间动作,由于底层是裸设备,所以文件内容是不确定的,所以在创建文件和扩展文件后,如果有需要要由用户主动调用该接口清零。
参数说明:
conn_in:输入参数,连接句柄。
fhandle:输入参数,打开的目录句柄。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
31. dmasm_get_group_info_by_name
函数原型:
ASMRETURN
dmasm_get_group_info_by_name(
asmcon_handle con_in,
sdbyte* group_name,
udint2* group_id,
udint2* status,
udint2* n_disk,
udint4* total_size,
udint4* free_size,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
通过磁盘组名获取磁盘组详细信息。
参数说明:
con_in:输入参数,连接句柄。
group_name:输入参数,磁盘组名字。
group_id:输出参数,磁盘组 ID。
status:输出参数,磁盘组状态(1:正在创建中 2:正常的 3:正在删除中)。
n_disk:输出参数,磁盘数。
total_size:输出参数,磁盘组大小,单位 AU。
free_size:输出参数,磁盘组空闲大小,单位 AU。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
32. dmasm_get_group_info_by_id
函数原型:
ASMRETURN
dmasm_get_group_info_by_id(
asmcon_handle con_in,
udint2 group_id,
sdbyte* group_name,
udint2 name_buflen,
udint2* status,
udint2* n_disk,
udint4* total_size,
udint4* free_size,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
通过磁盘组 ID 获取磁盘组详细信息。
参数说明:
con_in:输入参数,连接句柄。
group_id:输入参数,磁盘组 ID。
group_name:输出参数,磁盘组名字。
name_buflen:输入参数,磁盘组的 buf 长度
status:输出参数,磁盘组状态(1:正在创建中 2:正常的 3:正在删除中)。
n_disk:输出参数,磁盘数。
total_size:输出参数,磁盘组大小,单位 AU。
free_size:输出参数,磁盘组空闲大小,单位 AU。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
33. dmasm_dir_get_first
函数原型:
ASMRETURN
dmasm_dir_get_first(
asmcon_handle conn_in,
sdbyte* path_in,
sdbyte* suffix,
asm_dhandle_t* dir_handle_out,
ASM_FILE_ATTR* fattr_out,
asmbool* exist_flag,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
获取目录下第一个文件信息。
参数说明:
conn_in:输入参数,连接句柄。
path_in:输入参数,目录路径。
suffix:输入参数,指定扩展名关键字,如:”.log”。用于取出以指定关键字作为扩展名的文件。
dir_handle_out:输出参数,打开的目录句柄。
fattr_out:输出参数,文件属性结构。
exist_flag:输出参数,是否存在。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
34. dmasm_dir_get_next
函数原型:
ASMRETURN
dmasm_dir_get_next(
asmcon_handle conn_in,
asm_dhandle_t dir_handle,
sdbyte* path_in,
sdbyte* suffix,
ASM_FILE_ATTR* fattr_out,
asmbool* exist_flag,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
获取目录下下一个文件信息,须配合函数 dmasm_dir_get_first 使用。
参数说明:
conn_in:输入参数,连接句柄。
dir_handle:输入参数,打开的目录句柄。
path_in:输入参数,目录路径,须与目录句柄 dir_handle 中打开的 path_in 保持一致。
suffix:输入参数,指定扩展名关键字,如:”.log”。用于取出以指定关键字作为扩展名的文件。
fattr_out:输出参数,文件属性结构。
exist_flag:输出参数,是否存在。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
35. dmasm_dir_close
函数原型:
ASMRETURN
dmasm_dir_close(
asmcon_handle conn_in,
asm_dhandle_t dir_handle,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
关闭目录。
参数说明:
con_in:输入参数,连接句柄。
dir_handle:输入参数,打开的目录句柄。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
36. dmasm_file_attributes_get
函数原型:
ASMRETURN
dmasm_file_attributes_get(
asmcon_handle conn_in,
sdbyte* path,
ASM_FILE_ATTR* fattr_out,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
根据文件路径获取文件详细信息。
参数说明:
conn_in:输入参数,连接句柄。
path:输入参数,路径。
fattr_out:输出参数,文件属性结构。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
37. dmasm_file_is_exist
函数原型:
ASMRETURN
dmasm_file_is_exist(
asmcon_handle conn_in,
sdbyte* path,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
判断在 ASM 文件系统中,以 path 为文件路径的文件是否存在。
参数说明:
conn_in:输入参数,连接句柄。
path:输入参数,文件路径。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
19.1.2 返回值说明
返回值分为三种类型:正数,0 和负数。0 表示正常;正数为警告信息;负数为错误信息,对应的错误码请参考 19.1.3 错误码汇编。
19.1.3 错误码汇编
DMASMAPI 的错误码值域从-11000 开始。具体也可参考 V$ERR_INFO。
错误码 | 解释 |
---|---|
-11000 | ASM_API 系统尚未初始化 |
-11001 | ASM 磁盘文件或者目录指定为空 |
-11002 | ASM 磁盘目录[%s]无效 |
-11003 | ASM 文件簇[group_id:%d,file_id:0x%x,extent_no:%d]不存在 |
-11004 | ASM 文件截断失败 |
-11005 | ASM 系统未初始化 |
-11006 | ASM 目录删除失败,目录正在使用中,或者包含正在使用的文件 |
-11007 | ASM 磁盘组[%s]已经存在 |
-11008 | ASM 磁盘文件[%s]已经使用 |
-11009 | 无效的 ASM 磁盘文件[%s] |
-11010 | ASM 磁盘组[%s]不存在 |
-11011 | 主 ASM 磁盘组[%s]不能删除,除非仅剩下一个 |
-11012 | 无效的 ASM 文件 ID[0x%x] |
-11013 | ASM 磁盘[group_id:%d,disk_id:%d]不存在 |
-11014 | ASM 磁盘组 ID[%d]无效 |
-11022 | ASM 磁盘组 NAME[%s]无效 |
-11015 | ASM 文件异步读写目标长度太长,不能超过[%d] |
-11016 | 无效的 ASM 命名[%s] |
-11017 | 该类型磁盘禁止此操作 |
-11018 | 无效命令选项[%s] |
-11019 | 控制节点故障 |
-11020 | 磁盘大小无效,要求至少 32M |
-11040 | 磁盘大小无效 |
-11021 | ASM 文件删除失败,文件正在使用中 |
-11023 | 无效的句柄 |
-11024 | 无效的参数 |
-11025 | 文件[%s]已经存在 |
-11026 | 源[%s]是目录,请使用-r 选项 |
-11027 | 读文件错误,偏移超出文件大小 |
-11028 | 文件比较失败,大小不一致 |
-11029 | 文件比较失败,偏移[%s]内容不一致 |
-11030 | ASM 文件未打开 |
-11031 | ASM 目录禁止该操作 |
-11032 | 不能将目录[%s]拷贝到自己的子目录[%s] |
-11033 | DCR 版本不匹配 |
-11034 | 磁盘[%s]正在使用中 |
-11035 | 文件[%s]正在使用中 |
-11036 | 磁盘组被使用时不允许执行删磁盘组操作 |
-11037 | 无法创建 SPOOL 文件 %s |
-11038 | 无法附加 SPOOL 文件 %s |
-11039 | 打开文件数过多 |
-11041 | ASM 连接异常 |
-11042 | ASM 文件[%s]大小无效 |
-11043 | ASM 磁盘组个数达到上限 |
-11044 | 无效的配置文件路径 |
-11045 | 无效的 ASM 文件 ID |
-11046 | 获取机器 mac 地址失败 |
-11047 | 不允许远程连接 ASMSVR,请检查 DMDCR.INI 配置是否有误 |
-11048 | 文件路径名[%s]过长 |
-11049 | 当前路径'+'是无效路径 |
-11050 | 无效的条带化大小[%d] |
-11051 | 磁盘[%s]AU_SIZE 不匹配 |
-11052 | 无效参数值[%s] |
-11053 | 校验文件失败 |
-11055 | ASM 加载路径中 DCRV 磁盘过多 |
-11054 | 磁盘正在重平衡中 |
-11058 | 重复的名字[%s] |
-11059 | 生成磁盘伙伴关系失败 |
-11060 | 无效的 ASM 磁盘名[%s] |
-11061 | 无效的 DCRV 磁盘个数 |
-11062 | 访问到文件内已经截断的 AU |
-11063 | 无效的 ASM 磁盘子状态[%s] |
-11064 | 磁盘替换未完成 |
-11065 | 重平衡中止 |
-11066 | AU 加载失败 |
-11067 | ASM 文件个数达到上限 |
-11068 | 磁盘组禁止重平衡 |
-11069 | 超过 DCRV 磁盘个数的最大值 |
-11070 | 无法删除仅剩的一个 DCRV 磁盘 |
-11071 | ASM 集群状态处于[%s]中,请稍后重试 |
-11072 | ASM 文件大小超过上限 |
-11073 | ASM 或 DSC 集群不是所有节点都为 OK 状态 |
-11074 | ASM 文件[%s]是单副本 |
-11075 | 磁盘组名和系统磁盘组同名 |
-11076 | 删除磁盘后不满足多数派 |
-11077 | 无法分配多副本 AU |
-11078 | 磁盘组内磁盘大小不一致 |
-11056 | 不支持不同目录下的重命名 |
-11057 | 该路径下包含文件/目录数超过上限 |
19.1.4 编程示例
下面举一个简单的例子,展示 DMASMAPI 的使用方法。若本示例在编译过程中出现实参过多或者变量未声明等问题,可查询相应版本的 DMASMAPI 接口使用手册,适当增减参数或者将变量改为实际值。
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "asmapi2.h"
#define TRUE 1
#define FALSE 0
#define IS_SUCCESS(code) ((sdint4)code >= 0)
#define RET_IF_ERR_EX(c, act) \
{ if (!IS_SUCCESS(c)) { {act;} return (c); }}
/*运行前修改file_name username passwd ip port
镜像不支持远程写,示例程序需要和服务端在同一台机器
LINUX下编译
gcc -DLINUX -I/home/test/include test.c -L. -ldmasmapi -o demo
-I:指定头文件目录,本例中需要指定asmapi2.h头文件所在目录
-L(大写L):指定库搜索路径
-l(小写L):指定库名
-D:定义预处理宏*/
int
main(
int argc,
char* argv[]
)
{
int code = 0;
char err_desc[1024];
int err_len;
asm_fhandle_t fil_handle;
void* conn;
char* wbuf = "hello asm";
char rbuf[10];
int len;
int file_size = 20; //单位字节
int offset = 0;
int strip_size = 0; //条带大小
int redundancy_type = 1; //镜像类型
char* username = "ASMSYS";
char* passwd = "DCRpsd_123";
char* file_name = "+DATA/test1.dta";
char* ip = "192.168.100.118";
int port = 10060;
#ifdef WIN32
/*windows环境需要添加附加依赖项ws2_32.lib*/
WSADATA WsaData;
if (SOCKET_ERROR == WSAStartup(0x0101, &WsaData))
{
fprintf(stderr, "WSAStartup Failed\n");
exit(-1);
}
#endif
err_len = sizeof(err_desc);
len = (int)strlen(wbuf);
code = dmasm_sys_init(err_desc, &err_len, -1, 1);
if (!IS_SUCCESS(code))
{
fprintf(stderr, "dmasm_sys_init error:[%s]\n", err_desc);
return -1;
}
/* 分配连接句柄 */
code = dmasm_alloc_con(&conn, err_desc, &err_len);
if (!IS_SUCCESS(code))
{
fprintf(stderr, "dmasm_alloc_con error:[%s]\n", err_desc);
return -1;
}
/* 登录asmsvr,本地登录不校验密码,可以输入任意字符串,远程登录会校验用户名密码*/
code = dmasm_connect(conn, username, passwd, ip, port, NULL, err_desc, &err_len);
if (!IS_SUCCESS(code))
{
fprintf(stderr, "dmasm_connect error:[%s]\n", err_desc);
return -1;
}
/* 文件存在直接打开 */
if (dmasm_file_is_exist(conn, file_name, err_desc, &err_len) == TRUE)
{
code = dmasm_file_open(conn, file_name, &fil_handle, err_desc, &err_len);
RET_IF_ERR_EX(code, goto fun_end);
}
else
{
/* 在已有的磁盘组内创建asm文件, */
code = dmasm_file_create(conn, 1, file_name, file_size, &fil_handle, FALSE, strip_size, redundancy_type, err_desc, &err_len);
if (!IS_SUCCESS(code))
{
fprintf(stderr, "dmasm_file_create error code:%d [%s]\n", code, err_desc);
goto fun_end;
}
}
/* 写文件 */
code = dmasm_file_write_by_offset_normal(conn, fil_handle, offset, wbuf, len, err_desc, &err_len);
if (!IS_SUCCESS(code))
{
fprintf(stderr, "dmasm_file_write_by_offset_normal error code:%d [%s]\n", code, err_desc);
goto fun_end;
}
/* 读文件 */
code = dmasm_file_read_by_offset_normal(conn, fil_handle, offset, rbuf, len, err_desc, &err_len);
if (!IS_SUCCESS(code))
{
fprintf(stderr, "dmasm_file_write_by_offset_normal error code:%d [%s]\n", code, err_desc);
goto fun_end;
}
else
{
rbuf[len] = '\0';
fprintf(stderr, "dmasm_file_write_by_offset_normal succ buf:%s\n", rbuf);
}
fun_end:
// 文件存在就关闭删除
if (dmasm_file_is_exist(conn, file_name, err_desc, &err_len) == TRUE)
{
/* 关闭打开的文件句柄,否则删除会报错 */
dmasm_file_close(conn, fil_handle);
/* 删除文件 */
code = dmasm_file_delete(conn, file_name, err_desc, &err_len);
if (!IS_SUCCESS(code))
{
fprintf(stderr, "dmasm_file_delete error:[%s]\n", err_desc);
}
}
dmasm_close_con(conn);
dmasm_free_con(conn);
dmasm_sys_deinit();
return 0;
}
19.2 DMCSSM 接口
19.2.1 DLL 依赖库
监视器的 DLL 名称为 dmcssmon.dll(windows)和 libdmcssm.so(linux),使用监视器接口时必须加载,另外监视器 DLL 还依赖了其他的一些动态链接库,编程时需要将达梦 bin 目录的以下库拷贝到和 dmcssmon.dll 或 libdmcssm.so 相同目录下,也可以在加载动态链接库时直接指定 bin 目录,就不需要再拷贝库文件:
序号 | WINDOWS | 非 WINDOWS(LINUX 等) |
---|---|---|
1 | dmcalc.dll | libdmcalc.so |
2 | dmcfg.dll | libdmcfg.so |
3 | dmcomm.dll | libdmcomm.so |
4 | dmcvt.dll | libdmcvt.so |
5 | dmcyt.dll | libdmcyt.so |
6 | dmdcr.dll | libdmdcr.so |
7 | dmelog.dll | libdmelog.so |
8 | dmmem.dll | libdmmem.so |
9 | dmmout.dll | libdmmout.so |
10 | dmos.dll | libdmos.so |
11 | dmsys.dll | libdmsys.so |
12 | dmutl.dll | libdmutl.so |
19.2.2 返回值说明
监视器接口总体的返回值策略为:小于 0 表示执行失败,其他值表示执行成功。
相关的错误码说明请参考 19.2.3 错误码汇编,也可借助 cssm_get_error_msg_by_code 接口获取错误码对应的错误描述信息。
19.2.3 错误码汇编
错误码 | 解释 |
---|---|
-1 | 普通错误 |
-2 | 无效的句柄 |
-3 | 初始化日志信息失败 |
-4 | 初始化系统信息失败 |
-5 | 读取 DMCSSM.INI 文件失败(路径错误或配置错误或没有权限) |
-6 | 无效的日志文件路径 |
-7 | 建立到所有 CSS 的连接失败,可能 CSS 都未启动,由用户决定是否忽略此错误码继续往下执行,如果不忽略此错误,认定初始化失败,则需要先销毁监视器环境,再释放操作句柄。 |
-8 | 非法的参数,参数为空或长度超长或值非法 |
-9 | 没有找到 code 对应的错误信息 |
-10 | 内存不足 |
-11 | 监视器已达到最大个数(同一套 DSC 集群最多允许同时启动 10 个监视器) |
-1001 | 用户自定义异常或者未知错误 |
-1003 | 根据 ep_seqno 获取发送端口失败 |
-1004 | 到 dmcss 的连接断开 |
-1005 | 有消息正在发送中,您的命令当前不能执行 |
-1007 | 设置 CSS 的 MID 命令执行失败 |
-1009 | 监视器操作冲突 |
-1012 | CSS 执行失败 |
-1017 | 通知 CSS 执行命令失败 |
-1018 | 获取有效的 CSS 通信端口失败,CSS 尚未启动或监视器配置错误 |
-1019 | 无效的组名或尚未收到消息 |
-1020 | 接收 CSS 消息超时 |
-1022 | 非法的 DCR 类型 |
-1023 | 只有主 CSS 能执行该操作 |
-1024 | CSS 中没有找到指定类型的组信息 |
-1025 | 执行 OPEN FORCE 的组当前不是 SLAVE STARTUP 状态 |
-1026 | 无效的 EP 名称或尚未收到消息 |
-1027 | 未找到指定类型的组信息 |
-1028 | 检测到主 CSS 发生变化 |
-1029 | 当前不存在活动的 CSS |
-1031 | 通知 CSS 打开监控失败 |
-1033 | 通知 CSS 关闭监控失败 |
-1035 | 命令执行失败 |
-1036 | 组当前没有活动 EP |
-1037 | 当前存在有活动的 DB 节点,需要先退出对应的 DB 组,才允许退出 ASM 组 |
-1038 | 组中的 EP 已处于 ACTIVE 状态(只收集活动 CSS 对应的 EP),或者 CSS 配置有自动重启,请等待 CSS 自动检测重启 |
-1039 | 当前活动的 CSS 监控都已处于打开状态 |
-1040 | 当前活动的 CSS 监控都已处于关闭状态 |
-1041 | 获取 CSS 的通信端口失败 |
-1042 | 通知 CSS 执行 EP STARTUP 失败 |
-1045 | CSS 中没有找到指定组的信息 |
-1046 | CSS 对指定的组配置了自动重启,请等待 CSS 自动检测重启对应的 EP |
-1047 | EP 已经处于 ACTIVE 状态 |
-1048 | ASM 实例未处于 ACTIVE 状态 |
-1049 | ASM 组未处于 OPEN 状态 |
-1050 | 指定组中没有活动 EP |
-1051 | 当前存在有活动的 DB 节点,需要先退出对应的 DB 组 |
-1052 | CSS 监控处于关闭状态,不允许执行此命令 |
-1053 | CSS 类型的组不允许执行此命令 |
-1057 | 获取主 CSS 通信端口失败,主 CSS 尚未选出或 CSS 未启动或者监视器配置错误 |
-1058 | ASM 组没有活动节点或者活动节点不是 OPEN 状态,或者 ASM 组不是 OPEN 状态,不允许启动 DB 组 |
-1059 | 检测到主 CSS 发生变化,命令中断执行 |
-1065 | 关闭 CSS 监控失败 |
-1067 | 打开 CSS 监控失败 |
-1069 | 指定组不是 SLAVE STARTUP 状态,不允许执行 OPEN FORCE |
-1070 | CSS 监控处于打开状态,不允许手动执行此命令,请等待 CSS 自动处理 |
-1071 | CSS 当前正在做故障处理或故障恢复 |
-1072 | CSS 监控处于打开状态,不允许执行此命令 |
-1073 | 没有找到满足故障恢复条件的节点 |
-1074 | CSS 当前正在做故障处理或故障恢复 |
-1075 | 没有找到满足故障处理条件的节点 |
-1076 | 需要先对 ASM 组做故障处理 |
-1077 | CSS 对指定的组没有配置自动重启参数 |
-1078 | 监视器超时仍未等到组中的所有 EP 执行成功,命令执行失败 |
-1079 | 监视器超时仍未等到当前 EP 执行成功,命令执行失败 |
-1080 | 控制节点尚未选出,获取信息失败 |
-1081 | 无效的节点名或尚未收到消息 |
-1082 | 指定节点的组内序号非法 |
-1083 | 组中的 EP 不是活动状态 |
-1085 | 对应的 ASM 组中没有活动节点,无法执行故障处理 |
-1086 | 指定组中没有活动节点,无法执行故障处理 |
-1087 | 没有找到满足故障恢复条件的节点 |
-1088 | 需要先对 ASM 组做故障处理 |
-1089 | 监视器正在执行命令,请稍候重试 |
-1090 | CSS 没有对组配置重启参数 |
-1091 | 非法的 EP 序号 |
-1092 | 对 EP 写入 HALT 命令成功,请等待处理结果 |
-1094 | ASM 组中没有活动 EP,不允许执行故障处理 |
-1095 | 指定组中没有活动 EP,不允许执行故障处理 |
-1096 | 打开 CSS 对节点的自动拉起成功 |
-1097 | 关闭 CSS 对节点的自动拉起成功 |
-1098 | 组中没有非活动 EP |
-1105 | 扩展节点失败,请查看日志获取详细信息 |
-1521 | DSC 环境同一机器上的节点不允许配置相同的归档路径 |
19.2.4 C 接口说明
1. cssm_alloc_handle
函数原型:
CSSM_RETURN
cssm_alloc_handle(
mhandle* mhdle
);
功能说明:
分配监视器操作句柄,监视器的接口都通过此句柄调用执行。
参数说明:
mhdle: 输出参数,分配到的监视器句柄。
返回值:
0:执行成功。
<0:执行失败。
2. cssm_get_error_msg_by_code
函数原型:
CSSM_RETURN
cssm_get_error_msg_by_code(
mhandle mhdle,
mint4 code,
mschar* buf_msg,
muint4 buf_len,
muint4* msg_len_out
);
功能说明:
获取输入 code 对应的错误描述信息,code 必须是小于 0 的值。
参数说明:
mhdle: 输入参数,分配到的监视器句柄,注意如果是分配句柄或初始化环境时失败,允许 mhdle 是无效的,否则要求 mhdle 必须是有效句柄。
code:输入参数,需要获取错误信息的错误码 code,注意 code 必须是小于 0 的值。
buf_msg:输出参数,输出错误描述信息,注意 buf_msg 缓存长度建议大于 4096,避免输出信息被截断。
buf_len:输入参数,指定 buf_msg 可写入的最大长度。
msg_len_out:输出参数,buf_msg 缓存实际写入长度。
返回值:
0:执行成功。
<0:执行失败,-10 表示没有找到 code 对应的错误信息。
3. cssm_init
函数原型:
CSSM_RETURN
cssm_init(
mhandle mhdle,
mschar* ini_path,
mschar* log_path
);
功能说明:
初始化监视器环境。
参数说明:
mhdle: 输入参数,监视器操作句柄。
ini_path: 输入参数,指定 dmcssm.ini 的绝对路径。
log_path: 输入参数,指定日志文件的存放路径,如果为 NULL 或空串,则将 dmcssm.ini 中配置的 MON_LOG_PATH 作为日志文件路径,如果 dmcssm.ini 中没有配置 MON_LOG_PATH,则将 dmcssm.ini 的同级目录作为日志文件路径。
返回值:
0:执行成功。
<0:执行失败,-7 表示监视器尝试建立到所有 CSS 的连接失败,可能 CSS 都未启动,允许忽略此错误继续执行其他操作,如果不忽略此错误,认定初始化失败,则需要先正常销毁监视器环境(调用 cssm_deinit 接口),再释放操作句柄(调用 cssm_free_handle 接口)。
4. cssm_msg_event_wait
函数原型:
void
cssm_msg_event_wait(
mhandle mhdle
);
功能说明:
等待消息事件。监视器接口命令执行过程中产生的中间输出消息,以及收到 CSS 自动处理的消息时都会将消息写入到缓存并通知消息事件,调用者只需要调用此接口等待即可,等待事件发生后,可通过接口 cssm_get_exec_msg 去读取输出消息。
这种方式需要单独起一个线程来处理消息,以免消息被阻塞。
参数说明:
mhdle: 输入参数,监视器操作句柄。
返回值:
无
5. cssm_get_exec_msg
函数原型:
CSSM_RETURN
cssm_get_exec_msg(
mhandle mhdle,
mschar* buf_msg,
muint4 buf_len,
muint4* msg_len_out,
muint4* get_flag
);
功能说明:
获取输出信息,和 cssm_msg_event_wait 配合使用。
参数说明:
mhdle:输入参数,监视器操作句柄。
buf_msg:输出参数,保存获取到的输出消息,注意 buf_msg 缓存长度需要大于 4096,以免长度不够导致消息被截断。
buf_len:输入参数,指定 buf_msg 可写入的最大长度,建议 buf_msg 缓存长度及 buf_len 输入值大于 4096,避免消息被截断。
msg_len_out:输出参数,写消息成功后,输出实际写入的消息长度。
get_flag:输出参数,是否继续读取消息,TRUE 表示还有消息可读,FALSE 表示已全部读完。
返回值:
0:执行成功。
<0:执行失败。
6. cssm_get_msg_exit_flag
函数原型:
CSSM_RETURN
cssm_get_msg_exit_flag(
mhandle mhdle,
mbool* exit_flag
);
功能说明:
如果上层应用程序中有单独的消息线程,可通过调用此接口获取退出标记,在标记为 TRUE 时可正常退出线程。
参数说明:
mhdle: 输入参数,监视器操作句柄。
exit_flag:输出参数,输出退出标记,1 表示可以正常退出,0 表示不能退出。
返回值:
0:执行成功。
<0:执行失败。
7. cssm_set_msg_exit_event
函数原型:
void
cssm_set_msg_exit_event(
mhandle mhdle
);
功能说明:
设置消息退出事件。如果上层应用程序中有单独的消息线程,在 cssm_get_msg_exit_flag 接口获取到退出标记为 TRUE 时,需要调用此接口设置退出事件。
参数说明:
mhdle: 输入参数,监视器操作句柄。
返回值:
无
8. cssm_msg_event_deinit
函数原型:
void
cssm_msg_event_deinit(
mhandle mhdle
);
功能说明:
通知并等待消息退出。使用等待事件方式获取监视器消息时,需要单独起一个线程,在程序结束,退出线程时,需要调用此接口通知并等待消息线程退出。
消息线程相关的接口有 cssm_msg_event_wait、cssm_get_exec_msg、cssm_get_msg_exit_flag、cssm_set_msg_exit_event 和 cssm_msg_event_deinit,这几个接口需要配合使用。
参数说明:
mhdle: 输入参数,监视器操作句柄。
返回值:
无
9. cssm_get_master_css_info
函数原型:
CSSM_RETURN
cssm_get_master_css_info(
mhandle mhdle,
mbyte* ep_seqno,
mschar* ep_name
);
功能说明:
获取主 CSS 节点的组内序号和节点名称。
注意CSS需要5s的选举时间来确定主CSS,在CSS的选举时间内,此接口会执行失败,获取不到主CSS信息。
参数说明:
mhdle: 输入参数,监视器操作句柄。
ep_seqno:输出参数,输出主 CSS 节点的组内序号。
ep_name:输出参数,输出主 CSS 节点的名称,注意缓存长度不能小于 65,避免长度溢出。
返回值:
0:执行成功。
<0:执行失败。
10. cssm_get_master_asm_info
函数原型:
CSSM_RETURN
cssm_get_master_asm_info(
mhandle mhdle,
mbyte* ep_seqno,
mschar* ep_name
);
功能说明:
获取主 ASM 节点的组内序号和节点名称。
参数说明:
mhdle: 输入参数,监视器操作句柄。
ep_seqno:输出参数,输出主 ASM 节点的组内序号。
ep_name:输出参数,输出主 ASM 节点的名称,注意缓存长度不能小于 65,避免长度溢出。
返回值:
0:执行成功。
<0:执行失败。
11. cssm_get_master_db_info
函数原型:
CSSM_RETURN
cssm_get_master_db_info(
mhandle mhdle,
mschar* group_name,
mbyte* ep_seqno,
mschar* ep_name
);
功能说明:
获取主 DB 节点的组内序号和节点名称。
参数说明:
mhdle: 输入参数,监视器操作句柄。
group_name:输入参数,需要获取主 DB 信息的组名,允许配置有多个 DB 组。
ep_seqno:输出参数,输出主 DB 节点的组内序号。
ep_name:输出参数,输出主 DB 节点的名称,注意缓存长度不能小于 65,避免长度溢出。
返回值:
0:执行成功。
<0:执行失败。
12. cssm_get_css_auto_flag
函数原型:
CSSM_RETURN
cssm_get_css_auto_flag(
mhandle mhdle,
mschar* css_name,
mbool* auto_flag
);
功能说明:
获取指定 CSS 的监控状态。
参数说明:
mhdle: 输入参数,监视器操作句柄。
css_name:输入参数,需要获取监控状态的 CSS 名称。
auto_flag:输出参数,为 1 表示 CSS 监控处于打开状态,为 0 表示 CSS 监控处于关闭状态。
返回值:
0:执行成功。
<0:执行失败。
13. cssm_get_css_auto_info
函数原型:
CSSM_RETURN
cssm_get_css_auto_info(
mhandle mhdle,
mschar* css_name,
mbyte* auto_flag,
mschar* asm_name,
mbyte* asm_auto_restart,
mschar* db_name,
mbyte* db_auto_restart
);
功能说明:
获取指定 CSS 上的自动监控、自动拉起信息。
参数说明:
mhdle: 输入参数,监视器操作句柄。
css_name:输入参数,需要获取信息的 CSS 名称。
auto_flag:输出参数,为 1 表示 CSS 监控处于打开状态,为 0 表示 CSS 监控处于关闭状态。
asm_name:输出参数,当前 css 可以控制自动拉起的 asm 节点名称。
asm_auto_restart:输出参数,asm_name 当前的自动拉起状态,为 1 表示自动拉起打开,为 0 表示自动拉起关闭,0xFE 表示 dmdcr.ini 中配置有自动拉起命令串,但自动拉起检测间隔为 0,为 0xFF 则表示 dmdcr.ini 中自动拉起参数配置错误。
db_name:输出参数,当前 css 可以控制自动拉起的 db 节点名称。
db_auto_restart:输出参数,db_name 当前的自动拉起状态,为 1 表示自动拉起打开,为 0 表示自动拉起关闭,0xFE 表示 dmdcr.ini 中配置有自动拉起命令串,但自动拉起检测间隔为 0,为 0xFF 则表示 dmdcr.ini 中自动拉起参数配置错误。
返回值:
0:执行成功。
<0:执行失败。
14. cssm_set_group_auto_restart
函数原型:
CSSM_RETURN
cssm_set_group_auto_restart(
mhandle mhdle,
mschar* group_name,
mbyte auto_restart_flag
);
功能说明:
设置指定组的自动拉起标记。
参数说明:
mhdle: 输入参数,监视器操作句柄。
group_name:输入参数,输入需要修改自动拉起标记的组名。
auto_restart_flag:输入参数,输入需要修改的值,只能是 0 或 1,为 0 表示关闭指定组自动拉起功能,为 1 表示打开指定组自动拉起功能。
返回值:
0:执行成功。
<0:执行失败。
15. cssm_get_n_group
函数原型:
CSSM_RETURN
cssm_get_n_group(
mhandle mhdle,
muint4* n_group,
mbyte* group_seqno,
mschar** group_name,
mschar** group_type
);
功能说明:
获取 DSC 集群所有的组信息。
参数说明:
mhdle: 输入参数,监视器操作句柄。
n_group:输入输出参数,输入参数指定要获取的最多组个数,建议不小于 16,避免取不到完整信息,输出参数为实际获取的组个数。
group_seqno:输出参数,输出各组的序号,参数为 mbyte 数组类型,数组长度为 n_group 的输入值。
group_name:输出参数,输出各组的名称,参数为字符串指针数组类型,数组长度是 n_group 的输入值,每个指针元素指向的缓存长度不能小于 65,避免长度溢出。
group_type:输出参数,输出各组的类型,参数为字符串指针数组类型,数组长度是 n_group 的输入值,每个指针元素指向的缓存长度不能小于 65,避免长度溢出。
返回值:
0:执行成功。
<0:执行失败。
16. cssm_get_n_ep
函数原型:
CSSM_RETURN
cssm_get_n_ep(
mhandle mhdle,
mschar* group_name,
muint4* n_ep,
mbyte* ep_seqno,
mschar** ep_name
);
功能说明:
获取指定组中的节点信息。
参数说明:
mhdle: 输入参数,监视器操作句柄。
group_name:输入参数,指定要获取节点信息的组名。
n_ep:输入输出参数,输入参数指定要获取的最多节点个数,建议不小于 16,避免取不到完整信息,输出参数为实际获取的节点个数。
ep_seqno:输出参数,输出各节点的组内序号,参数为 mbyte 数组类型,数组长度为 n_ep 的输入值。
ep_name:输出参数,输出各节点的名称,参数为字符串指针数组类型,数组长度是 n_ep 的输入值,每个指针元素指向的缓存长度不能小于 65,避免长度溢出。
返回值:
0:执行成功。
<0:执行失败。
17. cssm_get_group_info_by_name
函数原型:
CSSM_RETURN
cssm_get_group_info_by_name(
mhandle mhdle,
mschar* group_name,
mbyte* group_seqno,
mschar* group_type,
mbyte* n_ep,
mbyte* ep_seqno_arr,
mschar** ep_name_arr,
mbyte* n_ok_ep,
mbyte* ok_ep_arr,
mbyte* master_ep,
mschar* master_ep_name,
mschar* sta,
mschar* sub_sta,
mbyte* n_break_ep,
mbyte* break_ep_arr,
mbyte* recover_ep,
mbyte* crash_over
);
功能说明:
获取指定名称的组信息。
参数说明:
mhdle: 输入参数,监视器操作句柄。
group_name:输入参数,指定要获取信息的组名。
group_seqno:输出参数,输出组的序号。
group_type:输出参数,输出组的类型,注意缓存长度不能小于 65,避免长度溢出。
n_ep:输入输出参数,输入参数指定最多要获取的节点个数,建议输入值不小于 16,避免取不到完整信息,输出参数为实际获取的节点个数。
ep_seqno_arr:输出参数,输出各节点的组内序号,是 mbyte 数组类型,数组长度为 n_ep 的输入值。
ep_name_arr:输出参数,输出各节点的名称,是字符串指针数组类型,数组长度为 n_ep 的输入值,每个指针元素指向的缓存长度不能小于 65,避免长度溢出。
n_ok_ep:输入输出参数,输入参数指定最多要获取的正常节点个数,建议输入值不小于 16,避免取不到完整信息,输出参数为实际获取的正常节点个数,该字段只对 ASM/DB 类型的组有效,CSS 类型的组输出为 0。
ok_ep_arr:输出参数,输出组中正常节点的组内序号,是 mbyte 数组类型,数组长度是 n_ok_ep 的输入值,该字段只对 ASM/DB 类型的组有效。
master_ep:输出参数,输出组中控制节点的组内序号。
master_ep_name:输出参数,输出组中控制节点的名称,注意缓存长度不能小于 65,避免长度溢出。
sta:输出参数,输出组的状态,该字段只对 ASM/DB 类型的组有效,CSS 类型的组输出为空串。
sub_sta:输出参数,输出组的子状态,该字段只对 ASM/DB 类型的组有效,CSS 类型的组输出为空串。
n_break_ep:输出参数,输出组中正在执行故障处理的节点个数。
break_ep_arr:输出参数,输出组中正在执行故障处理的节点序号,该字段只对 ASM/DB 类型的组有效,CSS 类型的组输出为 0xFF。
recover_ep:输出参数,输出组中正在执行故障恢复的节点序号,该字段只对 ASM/DB 类型的组有效,CSS 类型的组输出为 0xFF。
crash_over:输出参数,表示故障处理是否结束。0 表示未结束,1 表示结束。
返回值:
0:执行成功。
<0:执行失败。
18. cssm_get_ep_info_by_name
函数原型:
CSSM_RETURN
cssm_get_ep_info_by_name(
mhandle mhdle,
mschar* group_name,
mschar* ep_name,
mbyte* css_seqno,
mschar* css_name,
mschar* css_time,
mbyte* ep_seqno,
mschar* work_mode,
mschar* inst_stat,
mschar* vtd_stat,
mschar* ok_stat,
mschar* is_active,
mschar* ep_guid,
mschar* ep_ts
);
功能说明:
获取指定名称的组信息。
参数说明:
mhdle: 输入参数,监视器操作句柄。
group_name:输入参数,指定要获取信息的组名。
ep_name:输入参数,指定要获取信息的节点名称。
css_seqno:输出参数,输出取得节点信息的 CSS 序号。
css_name:输出参数,输出取得节点信息的 CSS 名称,注意缓存长度不能小于 65,避免长度溢出。
css_time:输出参数,输出取得节点信息的 CSS 当前时间,注意缓存长度不能小于 65,避免长度溢出。
ep_seqno:输出参数,输出节点的组内序号。
work_mode:输出参数,输出节点的工作模式,注意缓存长度不能小于 65,避免长度溢出。
inst_stat:输出参数,输出节点的工作状态,注意缓存长度不能小于 65,避免长度溢出。
vtd_stat:输出参数,输出节点在 Voting Disk 中的状态,注意缓存长度不能小于 65,避免长度溢出。
ok_stat:输出参数,输出节点状态是否正常(OK/ERROR),注意缓存长度不能小于 6,避免长度溢出。
is_active:输出参数,输出节点是否处于活动状态(TRUE/FALSE),注意缓存长度不能小于 6,避免长度溢出。
ep_guid:输出参数,输出节点的 guid 值。
ep_ts:输出参数,输出节点的时间戳值。
返回值:
0:执行成功。
<0:执行失败。
19. cssm_get_header_config_info
函数原型:
CSSM_RETURN
cssm_get_header_config_info(
mhandle mhdle,
muint4* dcr_n_group,
mschar* dcr_vtd_path,
muint8* dcr_oguid,
);
功能说明:
输出 dmdcr_cfg.ini 中配置的全局信息。
参数说明:
mhdle: 输入参数,监视器操作句柄。
dcr_n_group:输出参数,输出配置的组个数。
dcr_vtd_path:输出参数,输出 Voting Disk 路径,注意缓存长度不能小于 257,避免长度溢出。
dcr_oguid:输出参数,输出配置的 OGUID 标识。
返回值:
0:执行成功。
<0:执行失败。
20. cssm_get_group_config_info
函数原型:
CSSM_RETURN
cssm_get_group_config_info(
mhandle mhdle,
mschar* dcr_grp_name,
mschar* dcr_grp_type,
mbyte* dcr_grp_n_ep,
muint4* dcr_grp_dskchk_cnt,
);
功能说明:
输出 dmdcr_cfg.ini 中配置的组信息。
参数说明:
mhdle: 输入参数,监视器操作句柄。
dcr_grp_name:输入参数,输入要获取信息的组名。
dcr_grp_type:输出参数,输出配置的组类型,注意缓存长度不能小于 65,避免长度溢出。
dcr_grp_n_ep:输出参数,输出组中配置的节点个数。
dcr_grp_dskchk_cnt:输出参数,输出指定组配置的磁盘心跳容错时间。
返回值:
0:执行成功。
<0:执行失败。
21. cssm_get_ep_config_info
函数原型:
CSSM_RETURN
cssm_get_ep_config_info(
mhandle mhdle,
mschar* dcr_group_name,
mschar* dcr_ep_name,
mbyte* dcr_ep_seqno,
mschar* dcr_ep_host,
muint4* dcr_ep_port,
muint4* dcr_ep_shm_key,
muint4* dcr_ep_shm_size,
mschar* dcr_ep_asm_load_path
);
功能说明:
输出 dmdcr_cfg.ini 中配置的节点信息。
参数说明:
mhdle: 输入参数,监视器操作句柄。
dcr_group_name:输入参数,输入节点所在的组名。
dcr_ep_name:输入参数,输入节点名称。
dcr_ep_seqno:输出参数,输出节点的组内序号,CSS/ASM 类型的节点为自动分配的值,DB 类型的节点如果没有显式配置 DCR_EP_SEQNO,也是自动分配的值,否则为手动配置的值。
dcr_ep_host:输出参数,输出节点的 IP 地址,对 CSS/ASM 类型的节点有效,表示登录 CSS/ASM 节点的 IP 地址,注意缓存长度不能小于 65,避免长度溢出。
dcr_ep_port:输出参数,输出节点的 TCP 监听端口,对 CSS/ASM 类型的节点有效,对应登录 CSS/ASM 的端口号。
dcr_ep_shm_key:输出参数,输出节点的共享内存标识,对 ASM 类型的节点有效。
dcr_ep_shm_size:输出参数,输出节点的共享内存大小,单位 M,对 ASM 类型的节点有效。
dcr_ep_asm_load_path:输出参数,输出节点的 ASM 磁盘扫描路径,对 ASM 类型的节点有效,注意缓存长度不能小于 257,避免长度溢出。
返回值:
0:执行成功。
<0:执行失败。
22. cssm_get_monitor_info
函数原型:
CSSM_RETURN
cssm_get_monitor_info(
mhandle mhdle,
mbyte* css_seqno,
mschar* css_name,
muint4* n_mon,
mschar** conn_time_arr,
muint8* mid_arr,
mschar** mon_ip_arr
);
功能说明:
输出连接到主 CSS 上的所有监视器信息,如果主 CSS 故障或尚未选出,则任选一个 CSS 输出所有的连接信息。
参数说明:
mhdle: 输入参数,监视器操作句柄。
css_seqno:输出参数,输出取得监视器连接信息的 CSS 序号。
css_name:输出参数,输出取得监视器连接信息的 CSS 名称,注意缓存长度不能小于 65,避免长度溢出。
n_mon:输入输出参数,输入值指定可获取的最多的监视器个数,建议不小于 10,避免取不到完整信息,输出值为实际获取到的监视器个数。
conn_time_arr:输出参数,参数类型为字符串指针数组类型,数组长度为 n_mon 的输入值,输出各监视器连接到 css_name 的时间,注意每个数组元素指向的缓存长度不能小于 65,避免长度溢出。
mid_arr:输出参数,参数类型为 muint8 数组类型,数组长度为 n_mon 的输入值,输出各监视器的 mid 值。
mon_ip_arr:参数类型为字符串指针数组类型,数组长度为 n_mon 的输入值,输出各监视器的 IP 地址,注意每个数组元素指向的缓存长度不能小于 65,避免长度溢出。
返回值:
0:执行成功。
<0:执行失败。
23. cssm_css_startup
函数原型:
CSSM_RETURN
cssm_css_startup(
mhandle mhdle
);
功能说明:
打开当前所有活动 CSS 的监控功能。
参数说明:
mhdle: 输入参数,监视器操作句柄。
返回值:
0:执行成功。
<0:执行失败。
24. cssm_css_stop
函数原型:
CSSM_RETURN
cssm_css_stop(
mhandle mhdle
);
功能说明:
关闭当前所有活动 CSS 的监控功能。
CSS 监控被关闭后,只负责调整各组节点的 active 状态,除此之外不会做任何自动处理,也不会自动拉起对应的节点,如果在监控关闭后,通过手动方式(非 cssm_ep_startup 接口方式)启动 ASM 或 DB 组,各节点也无法正常启动到 OPEN 状态。
参数说明:
mhdle: 输入参数,监视器操作句柄。
返回值:
0:执行成功。
<0:执行失败。
25. cssm_open_force
函数原型:
CSSM_RETURN
cssm_open_force(
mhandle mhdle,
mschar* group_name
);
功能说明:
强制 OPEN 指定的组。
使用场景:
在启动 ASM 或 DB 组时,如果某个节点故障一直无法启动,可借助此接口将 ASM 或 DB 组强制 OPEN。
接口会发送消息到主 CSS 执行,并且主 CSS 的监控需要处于打开状态,如果主 CSS 故障或尚未选出,则接口执行失败。
参数说明:
mhdle: 输入参数,监视器操作句柄。
group_name:输入参数,指定要强制 OPEN 的组名。
返回值:
0:执行成功。
<0:执行失败。
26. cssm_ep_startup
函数原型:
CSSM_RETURN
cssm_ep_startup(
mhandle mhdle,
mschar* group_name
);
功能说明:
启动指定 ASM 或 DB 组的所有节点。
如果 CSS 已经配置了自动重启,并且 CSS 的监控处于打开状态,则接口不允许执行,需要等待 CSS 自动检测故障并执行重启操作。
每个 CSS 只负责重启和自己的 dmdcr.ini 中配置的 DMDCR_SEQNO 相同的 ASM 或 DB 节点,因此需要所有 CSS 都处于活动状态,否则只通知当前活动的 CSS 重启相对应的节点。
注意只有在ASM组正常启动到OPEN状态,并且所有活动的ASM节点都处于OPEN状态时,才允许启动DB组,否则执行DB组的启动操作会报错。
另外在接口执行时,如果CSS监控处于关闭状态,则会直接打开CSS监控,否则ASM或DB组无法正常启动到OPEN状态。
参数说明:
mhdle: 输入参数,监视器操作句柄。
group_name:输入参数,指定要启动的组名。
返回值:
0:执行成功。
<0:执行失败。
27. cssm_ep_stop
函数原型:
CSSM_RETURN
cssm_ep_stop(
mhandle mhdle,
mschar* group_name
);
功能说明:
退出指定的 ASM 或 DB 组,如果主 CSS 故障或尚未选出,则接口执行失败。
注意在退出ASM组时,需要保证DB组已经退出,否则会报错处理。
另外如果退出时,CSS监控没有关闭,在退出完成后,达到CSS设置的重启间隔之后,CSS仍然会执行自动拉起,如果要正常退出集群,不需要自动拉起,则退出之前需要调用cssm_css_stop接口停止CSS的监控功能。
参数说明:
mhdle: 输入参数,监视器操作句柄。
group_name:输入参数,指定要退出的组名。
返回值:
0:执行成功。
<0:执行失败。
28. cssm_ep_break
函数原型:
CSSM_RETURN
cssm_ep_break(
mhandle mhdle,
mschar* group_name
);
功能说明:
此接口只允许在主 CSS 监控关闭的情况下使用。
ASM 组或 DB 组在正常运行时,如果某个节点出现故障,则需要调用此接口执行故障处理,将故障节点从组的 OK 节点数组中摘除。
注意在主CSS监控关闭的情况下,如果ASM组的某个节点故障,和故障节点有相同DCR_SEQNO的DB节点需要使用cssm_ep_halt接口执行强制退出,否则DB节点访问对应的ASM文件系统失败,也会自动HALT。
在ASM和DB节点都出现故障的情况下,需要先对ASM组执行故障处理,再对DB组执行故障处理,否则会报错不允许执行。
参数说明:
mhdle: 输入参数,监视器操作句柄。
group_name:输入参数,指定要执行故障处理的组名。
返回值:
0:执行成功。
<0:执行失败。
29. cssm_ep_recover
函数原型:
CSSM_RETURN
cssm_ep_recover(
mhandle mhdle,
mschar* group_name
);
功能说明:
此接口只允许在主 CSS 监控关闭的情况下使用。
执行过故障处理的节点重启成功后,可通过调用此接口将故障节点重加入指定的 ASM 或 DB 组,重新恢复组到 OPEN 状态。
注意如果主CSS故障或尚未选出,则接口执行失败。另外只有在ASM组的故障节点重加入成功后,才允许重启对应的DB节点,并执行DB组的故障重加入。
参数说明:
mhdle: 输入参数,监视器操作句柄。
group_name:输入参数,指定要执行故障恢复的组名。
返回值:
0:执行成功。
<0:执行失败。
30. cssm_ep_halt
函数原型:
CSSM_RETURN
cssm_ep_halt(
mhandle mhdle,
mschar* group_name,
mschar* ep_name
);
功能说明:
强制退出指定组的指定 EP。
此接口在 CSS 监控打开或关闭的情况下都允许使用,适用于下述场景:
a. 某个 ASM 或 DB 节点故障,CSS DCR_GRP_DSKCHK_CNT 配置值很大,在容错时间内,CSS 不会调整故障节点的 active 标记,一直是 TRUE,CSS 认为故障 EP 仍然处于活动状态,不会自动执行故障处理,并且不允许手动执行故障处理。
另外执行 cssm_ep_startup 或 cssm_ep_stop 接口时,会误认为故障 EP 仍然处于活动状态,导致执行结果与预期不符。
此时可以通过执行此接口,通知 CSS 再次 HALT 故障 EP,确认 EP 已经被 HALT 后,CSS 会及时调整 active 标记为 FALSE,在此之后,对自动/手动故障处理,启动/退出 EP 节点等操作都可以正常执行。
b. 需要强制 HALT 某个正在运行的 ASM 或 DB 节点,也可以通过此接口完成。
参数说明:
mhdle: 输入参数,监视器操作句柄。
group_name:输入参数,指定要强制退出的节点所在的组名。
ep_name:输入参数,指定要强制退出的节点名称。
返回值:
0:执行成功。
<0:执行失败。
31. cssm_deinit
函数原型:
CSSM_RETURN
cssm_deinit(
mhandle mhdle
);
功能说明:
销毁监视器执行环境。
参数说明:
mhdle: 输入参数,监视器操作句柄。
返回值:
0:执行成功。
<0:执行失败。
32. cssm_free_handle
函数原型:
CSSM_RETURN
cssm_free_handle(
mhandle mhdle
);
功能说明:
释放分配到的监视器句柄。
参数说明:
mhdle: 输入参数,分配到的句柄。
返回值:
0:执行成功。
<0:执行失败。
19.2.5 JAVA 接口说明
1. cssm_init_handle
函数原型:
boolean
cssm_init_handle();
功能说明:
分配监视器操作句柄,监视器的接口都通过此句柄调用执行。
参数说明:
无
返回值:
true:分配成功,返回值为监视器操作句柄。
false:分配失败。
2. cssm_get_error_msg_by_code
函数原型:
CssMonMsg
cssm_get_error_msg_by_code(
int code
);
功能说明:
获取输入 code 对应的错误描述信息,code 必须是小于 0 的值。
参数说明:
code:输入参数,需要获取错误信息的错误码 code,注意 code 必须是小于 0 的值。
返回值:
返回 CssMonMsg 对象,可通过对象成员 returnCode 获取执行结果。
0:执行成功,可通过 CssMonMsg 的其他对象成员获取输出消息。
<0:执行失败。
3. cssm_init_env
函数原型:
int
cssm_init_env(
String ini_path,
String log_path
);
功能说明:
初始化监视器环境。
参数说明:
ini_path: 输入参数,指定 dmcssm.ini 的绝对路径。
log_path: 输入参数,指定日志文件的存放路径,如果为 NULL 或空串,则将 dmcssm.ini 中配置的 MON_LOG_PATH 作为日志文件路径,如果 dmcssm.ini 中没有配置 MON_LOG_PATH,则将 dmcssm.ini 的同级目录作为日志文件路径。
返回值:
0:执行成功。
<0:执行失败,-7 表示监视器尝试建立到所有 CSS 的连接失败,可能 CSS 都未启动,允许忽略此错误继续执行其他操作,如果不忽略此错误,认定初始化失败,则需要先正常销毁监视器环境(调用 cssm_deinit 接口),再释放操作句柄(调用 cssm_free_handle 接口)。
4. cssm_msg_event_wait
函数原型:
void
cssm_msg_event_wait();
功能说明:
等待消息事件。监视器接口命令执行过程中产生的中间输出消息,以及收到 CSS 自动处理的消息时都会将消息写入到缓存并通知消息事件,调用者只需要调用此接口等待即可,等待事件发生后,可通过接口 cssm_get_exec_msg 去读取输出消息。
这种方式需要单独起一个线程来处理消息,以免消息被阻塞。
参数说明:
无
返回值:
无
5. cssm_get_exec_msg
函数原型:
CssMonMsg
cssm_get_exec_msg();
功能说明:
获取输出信息,和 cssm_msg_event_wait 配合使用。
参数说明:
无
返回值:
返回 CssMonMsg 对象,可通过对象成员 returnCode 获取执行结果。
0:执行成功,可通过 CssMonMsg 的其他对象成员获取输出消息。
<0:执行失败。
6. cssm_get_msg_exit_flag
函数原型:
boolean
cssm_get_msg_exit_flag();
功能说明:
如果上层应用程序中有单独的消息线程,可通过调用此接口获取退出标记,在标记为 true 时可正常退出线程。
参数说明:
无
返回值:
true:允许线程退出。
false:不允许线程退出,需要继续等待获取输出消息。
7. cssm_set_msg_exit_event
函数原型:
void
cssm_set_msg_exit_event();
功能说明:
设置消息退出事件。如果上层应用程序中有单独的消息线程,在 cssm_get_msg_exit_flag 接口获取到退出标记为 true 时,需要调用此接口设置退出事件。
参数说明:
无
返回值:
无
8. cssm_msg_event_deinit
函数原型:
void
cssm_msg_event_deinit();
功能说明:
通知并等待消息退出。使用等待事件方式获取监视器消息时,需要单独起一个线程,在程序结束,退出线程时,需要调用此接口通知并等待消息线程退出。
消息线程相关的接口有 cssm_msg_event_wait、cssm_get_exec_msg、cssm_get_msg_exit_flag、cssm_set_msg_exit_event 和 cssm_msg_event_deinit,这几个接口需要配合使用。
参数说明:
无
返回值:
无
9. cssm_get_master_css_info
函数原型:
CssMonMasterEpInfo
cssm_get_master_css_info();
功能说明:
获取主 CSS 节点的组内序号和节点名称。
注意CSS需要5s的选举时间来确定主CSS,在CSS的选举时间内,此接口会执行失败,获取不到主CSS信息。
参数说明:
无
返回值:
返回 CssMonMasterEpInfo 对象,可通过对象成员 returnCode 获取执行结果。
0:执行成功,可通过 CssMonMasterEpInfo 的其他对象成员获取主 CSS 信息。
<0:执行失败。
10. cssm_get_master_asm_info
函数原型:
CssMonMasterEpInfo
cssm_get_master_asm_info();
功能说明:
获取主 ASM 节点的组内序号和节点名称。
参数说明:
无
返回值:
返回 CssMonMasterEpInfo 对象,可通过对象成员 returnCode 获取执行结果。
0:执行成功,可通过 CssMonMasterEpInfo 的其他对象成员获取主 ASM 信息。
<0:执行失败。
11. cssm_get_master_db_info
函数原型:
CssMonMasterEpInfo
cssm_get_master_db_info(
String group_name
);
功能说明:
获取主 DB 节点的组内序号和节点名称。
参数说明:
group_name:输入参数,需要获取主 DB 信息的组名,允许配置有多个 DB 组。
返回值:
返回 CssMonMasterEpInfo 对象,可通过对象成员 returnCode 获取执行结果。
0:执行成功,可通过 CssMonMasterEpInfo 的其他对象成员获取主 DB 信息。
<0:执行失败。
12. cssm_get_css_auto_flag
函数原型:
boolean
cssm_get_css_auto_flag(
String css_name
);
功能说明:
获取指定 CSS 的监控状态。
参数说明:
css_name:输入参数,需要获取监控状态的 CSS 名称。
返回值:
true:表示 CSS 监控处于打开状态。
false:表示 CSS 监控处于关闭状态。
13. cssm_get_css_auto_info
函数原型:
CssMonAutoInfo
cssm_get_css_auto_info(
String css_name
);
功能说明:
获取指定 CSS 上的自动监控、自动拉起信息。
参数说明:
css_name:输入参数,需要获取信息的 CSS 名称。
返回值:
返回 CssMonAutoInfo 对象,可通过对象成员 returnCode 获取执行结果。
0:执行成功,可通过 CssMonAutoInfo 的其他对象成员获取相关信息。
<0:执行失败。
14. cssm_set_group_auto_restart
函数原型:
int
cssm_set_group_auto_restart(
String group_name,
byte auto_restart_flag
);
功能说明:
设置指定组的自动拉起标记。
参数说明:
group_name:输入参数,输入需要修改自动拉起标记的组名。
auto_restart_flag:输入参数,输入需要修改的值,只能是 0 或 1,为 0 表示关闭指定组自动拉起功能,为 1 表示打开指定组自动拉起功能。
返回值:
0:执行成功。
<0:执行失败。
15. cssm_get_n_group
函数原型:
CssMonGrpNameArray
cssm_get_n_group();
功能说明:
获取 DSC 集群所有的组信息。
参数说明:
无
返回值:
返回 CssMonGrpNameArray 对象,可通过对象成员 returnCode 获取执行结果。
0:执行成功,可通过 CssMonGrpNameArray 的其他对象成员获取组信息。
<0:执行失败。
16. cssm_get_n_ep
函数原型:
CssMonEpNameArray
cssm_get_n_ep(
String group_name
);
功能说明:
获取指定组中的节点信息。
参数说明:
group_name:输入参数,指定要获取节点信息的组名。
返回值:
返回 CssMonEpNameArray 对象,可通过对象成员 returnCode 获取执行结果。
0:执行成功,可通过 CssMonEpNameArray 的其他对象成员获取节点信息。
<0:执行失败。
17. cssm_get_group_info_by_name
函数原型:
CssMonGrpInfo
cssm_get_group_info_by_name(
String group_name
);
功能说明:
获取指定名称的组信息。
参数说明:
group_name:输入参数,指定要获取信息的组名。
返回值:
返回 CssMonGrpInfo 对象,可通过对象成员 returnCode 获取执行结果。
0:执行成功,可通过 CssMonGrpInfo 的其他对象成员获取节点信息。
<0:执行失败。
18. cssm_get_ep_info_by_name
函数原型:
CssMonEpInfo
cssm_get_ep_info_by_name(
String group_name,
String ep_name
);
功能说明:
获取指定名称的组信息。
参数说明:
group_name:输入参数,指定要获取信息的组名。
ep_name:输入参数,指定要获取信息的节点名称。
返回值:
返回 CssMonEpInfo 对象,可通过对象成员 returnCode 获取执行结果。
0:执行成功,可通过 CssMonEpInfo 的其他对象成员获取节点信息。
<0:执行失败。
19. cssm_get_header_config_info
函数原型:
CssMonHeaderConfigInfo
cssm_get_header_config_info();
功能说明:
输出 dmdcr_cfg.ini 中配置的全局信息。
参数说明:
无
返回值:
返回 CssMonHeaderConfigInfo 对象,可通过对象成员 returnCode 获取执行结果。
0:执行成功,可通过 CssMonHeaderConfigInfo 的其他对象成员获取配置信息。
<0:执行失败。
20. cssm_get_group_config_info
函数原型:
CssMonGroupConfigInfo
cssm_get_group_config_info(
String dcr_group_name
);
功能说明:
输出 dmdcr_cfg.ini 中配置的组信息。
参数说明:
dcr_group_name:输入参数,输入要获取信息的组名。
返回值:
返回 CssMonGroupConfigInfo 对象,可通过对象成员 returnCode 获取执行结果。
0:执行成功,可通过 CssMonGroupConfigInfo 的其他对象成员获取配置信息。
<0:执行失败。
21. cssm_get_ep_config_info
函数原型:
CssMonEpConfigInfo
cssm_get_ep_config_info(
String dcr_group_name,
String dcr_ep_name
);
功能说明:
输出 dmdcr_cfg.ini 中配置的节点信息。
参数说明:
dcr_group_name:输入参数,输入节点所在的组名。
dcr_ep_name:输入参数,输入节点名称。
返回值:
返回 CssMonEpConfigInfo 对象,可通过对象成员 returnCode 获取执行结果。
0:执行成功,可通过 CssMonEpConfigInfo 的其他对象成员获取配置信息。
<0:执行失败。
22. cssm_get_monitor_info
函数原型:
CssMonitorInfo
cssm_get_monitor_info();
功能说明:
输出连接到主 CSS 上的所有监视器信息,如果主 CSS 故障或尚未选出,则任选一个 CSS 输出所有的连接信息。
参数说明:
无
返回值:
返回 CssMonitorInfo 对象,可通过对象成员 returnCode 获取执行结果。
0:执行成功,可通过 CssMonitorInfo 的其他对象成员获取配置信息。
<0:执行失败。
23. cssm_open_force
函数原型:
int
cssm_open_force(
String group_name
);
功能说明:
强制 OPEN 指定的组。
使用场景:
在启动 ASM 或 DB 组时,如果某个节点故障一直无法启动,可借助此接口将 ASM 或 DB 组强制 OPEN。
接口会发送消息到主 CSS 执行,并且主 CSS 的监控需要处于打开状态,如果主 CSS 故障或尚未选出,则接口执行失败。
参数说明:
group_name:输入参数,指定要强制 OPEN 的组名。
返回值:
0:执行成功。
<0:执行失败。
24. cssm_ep_startup
函数原型:
int
cssm_ep_startup(
String group_name
);
功能说明:
启动指定 ASM 或 DB 组的所有节点。
如果 CSS 已经配置了自动重启,并且 CSS 的监控处于打开状态,则接口不允许执行,需要等待 CSS 自动检测故障并执行重启操作。
每个 CSS 只负责重启和自己的 dmdcr.ini 中配置的 DMDCR_SEQNO 相同的 ASM 或 DB 节点,因此需要所有 CSS 都处于活动状态,否则只通知当前活动的 CSS 重启相对应的节点。
注意只有在ASM组正常启动到OPEN状态,并且所有活动的ASM节点都处于OPEN状态时,才允许启动DB组,否则执行DB组的启动操作会报错。
另外在接口执行时,如果CSS监控处于关闭状态,则会直接打开CSS监控,否则ASM或DB组无法正常启动到OPEN状态。
参数说明:
group_name:输入参数,指定要启动的组名。
返回值:
0:执行成功。
<0:执行失败。
25. cssm_ep_stop
函数原型:
int
cssm_ep_stop(
String group_name
);
功能说明:
退出指定的 ASM 或 DB 组,如果主 CSS 故障或尚未选出,则接口执行失败。
注意在退出ASM组时,需要保证DB组已经退出,否则会报错处理。
另外如果退出时,CSS监控没有关闭,在退出完成后,达到CSS设置的重启间隔之后,CSS仍然会执行自动拉起,如果要正常退出集群,不需要自动拉起,则退出之前需要调用cssm_css_stop接口停止CSS的监控功能。
参数说明:
group_name:输入参数,指定要退出的组名。
返回值:
0:执行成功。
<0:执行失败。
26. cssm_ep_break
函数原型:
int
cssm_ep_break(
String group_name
);
功能说明:
此接口只允许在主 CSS 监控关闭的情况下使用。
ASM 组或 DB 组在正常运行时,如果某个节点出现故障,则需要调用此接口执行故障处理,将故障节点从组的 OK 节点数组中摘除。
注意在主CSS监控关闭的情况下,如果ASM组的某个节点故障,和故障节点有相同DCR_SEQNO的DB节点需要使用cssm_ep_halt接口执行强制退出,否则DB节点访问对应的ASM文件系统失败,也会自动HALT。
在ASM和DB节点都出现故障的情况下,需要先对ASM组执行故障处理,再对DB组执行故障处理,否则会报错不允许执行。
参数说明:
group_name:输入参数,指定要执行故障处理的组名。
返回值:
0:执行成功。
<0:执行失败。
27. cssm_ep_recover
函数原型:
int
cssm_ep_recover(
String group_name
);
功能说明:
此接口只允许在主 CSS 监控关闭的情况下使用。
执行过故障处理的节点重启成功后,可通过调用此接口将故障节点重加入指定的 ASM 或 DB 组,重新恢复组到 OPEN 状态。
注意如果主CSS故障或尚未选出,则接口执行失败。另外只有在ASM组的故障节点重加入成功后,才允许重启对应的DB节点,并执行DB组的故障重加入。
参数说明:
group_name:输入参数,指定要执行故障恢复的组名。
返回值:
0:执行成功。
<0:执行失败。
28. cssm_ep_halt
函数原型:
int
cssm_ep_halt(
String group_name,
String ep_name
);
功能说明:
强制退出指定组的指定 EP。
此接口在 CSS 监控打开或关闭的情况下都允许使用,适用于下述场景:
a. 某个 ASM 或 DB 节点故障,CSS 的 DCR_GRP_DSKCHK_CNT 配置值很大,在容错时间内,CSS 不会调整故障节点的 active 标记,一直是 TRUE,CSS 认为故障 EP 仍然处于活动状态,不会自动执行故障处理,并且不允许手动执行故障处理。
另外执行 cssm_ep_startup 或 cssm_ep_stop 接口时,会误认为故障 EP 仍然处于活动状态,导致执行结果与预期不符。
此时可以通过执行此接口,通知 CSS 再次 HALT 故障 EP,确认 EP 已经被 HALT 后,CSS 会及时调整 active 标记为 FALSE,在此之后,对自动/手动故障处理,启动/退出 EP 节点等操作都可以正常执行。
b. 需要强制 HALT 某个正在运行的 ASM 或 DB 节点,也可以通过此接口完成。
参数说明:
group_name:输入参数,指定要强制退出的节点所在的组名。
ep_name:输入参数,指定要强制退出的节点名称。
返回值:
0:执行成功。
<0:执行失败。
29. cssm_deinit_env
函数原型:
int
cssm_deinit_env();
功能说明:
销毁监视器执行环境。
参数说明:
无
返回值:
0:执行成功。
<0:执行失败。
30. cssm_free_handle
函数原型:
int
cssm_free_handle();
功能说明:
释放分配到的监视器句柄。
参数说明:
无
返回值:
0:执行成功。
<0:执行失败。
19.2.6 C 编程示例
这里给出 C 程序的编程示例,运行环境为 VS2010,通过配置项目属性,使用 dmcssm_dll.lib 隐式加载 dll 的方式,注意此处仅为使用示例,实际使用时可以根据自己的需求再做调整。
#include "cssm_dll.h"
#include "stdio.h"
#include "stdlib.h"
#include "windows.h"
#include "process.h"
// 消息线程
DWORD
WINAPI
cssm_get_msg_thread(
mhandle handle
)
{
mschar buf_msg[4097];
muint4 msg_len_out;
muint4 get_flag;
mbool exit_flag;
CSSM_RETURN code;
while (TRUE)
{
//等待消息事件
cssm_msg_event_wait(handle);
// 获取退出标记
cssm_get_msg_exit_flag(handle, &exit_flag);
if (exit_flag == TRUE)
{
break;
}
do
{
// 获取并打印消息
code = cssm_get_exec_msg(handle, buf_msg, 4097, &msg_len_out, &get_flag);
if (code >=0 && msg_len_out > 0)
{
fprintf(stdout, "%s", buf_msg);
}
} while (get_flag); // 判断是否还有未读消息
}
// 设置退出事件
cssm_set_msg_exit_event(handle);
return 0;
}
// 清理环境
void
cssm_clear_env(
mhandle handle
)
{
//通知并等待dmmon_get_msg_thread消息线程退出
cssm_msg_event_deinit(handle);
// 销毁监视器环境
cssm_deinit(handle);
// 释放句柄
cssm_free_handle(handle);
}
int
main()
{
CSSM_RETURN ret;
mhandle handle;
HANDLE thread_handle;
char msg[4097];
int msg_len;
muint4 n_group;
mbyte group_seqno[16];
mschar* group_name[16];
mschar* group_type[16];
msint2 offset;
mschar mem[4096];
msint2 i;
//分配操作句柄
ret = cssm_alloc_handle(&handle);
if (ret < 0)
{
fprintf(stdout, "dmcssm alloc handle failed!\n");
// 获取ret对应的错误描述信息
cssm_get_error_msg_by_code(handle, ret, msg, 4097, &msg_len);
if (msg_len > 0)
{
fprintf(stdout, "code:%d, error msg:%s", ret, msg);
}
return ret;
}
// 创建消息线程
thread_handle = (HANDLE)_beginthreadex(NULL, 0, cssm_get_msg_thread, handle, 0, NULL);
if (thread_handle == NULL)
{
ret = GetLastError();
fprintf(stderr, "_beginthreadex error! desc:%s, code:%d\n", strerror(ret), ret);
return ret;
}
//初始化监视器环境,可以选择忽略-8错误(建立到所有CSS连接失败,可能当前CSS都还未启动)
ret = cssm_init(handle, "D:\\dmcssm\\dmcssm.ini", "D:\\dmcssm\\log");
if (ret < 0 && ret != -8)
{
fprintf(stdout, "dmcssm init failed!\n");
// 获取ret对应的错误描述信息
cssm_get_error_msg_by_code(handle, ret, msg, 4097, &msg_len);
if (msg_len > 0)
{
fprintf(stdout, "code:%d, error msg:%s", ret, msg);
}
cssm_clear_env(handle);
return ret;
}
offset = 0;
for (i = 0; i < 16; i++)
{
group_name[i] = mem + offset;
offset += 129;
group_type[i] = mem + offset;
offset += 65;
}
n_group = 16;
ret = cssm_get_n_group(handle, &n_group, group_seqno, group_name, group_type);
if (ret < 0)
{
fprintf(stdout, "dmcssm get group info failed!\n");
//获取ret对应的错误描述信息
cssm_get_error_msg_by_code(handle, ret, msg, 4097, &msg_len);
if (msg_len > 0)
{
fprintf(stdout, "code:%d, error msg:%s", ret, msg);
}
}
else
{
fprintf(stdout, "Get group info succeed, n_group: %d\n\n", n_group);
}
// 执行其他接口调用
//...
// 清理环境
cssm_clear_env(handle);
system("pause");
return 0;
}
19.2.7 Java 编程示例
这里给出 Java 程序的编程示例,运行环境为 Eclipse,使用加载监视器 jar 包的方式,jar 包名称为 com.dameng.jni_7.0.0.jar,注意此处仅为使用示例,实际使用时可以根据自己的需求再做调整。
package com.dameng.test;
import com.dameng.cssm.*;
public class CssMonTest {
public CssMonDLL monDll = null;
public CssMonMsg monMsg = null;
public Thread msgThread = null;
public String ini_path = "D:\\dsc\\dmcssm.ini";
public String log_path = "D:\\dsc\\log";
//接收消息线程
public void startThread()
{
msgThread = new Thread(new Runnable()
{
@Override
public void run()
{
while (true)
{
//等待消息事件
monDll.cssm_msg_event_wait();
//获取退出标记
if (monDll.cssm_get_msg_exit_flag() == true)
break;
do
{
//获取并打印消息
monMsg = monDll.cssm_get_exec_msg();
if(monMsg.getReturnCode() < 0)
break;
if(monMsg.getMsg().length() > 0)
{
System.out.print(monMsg.getMsg());
}
} while (monMsg.getMsgFlag() == 1); //是否还有未读消息
}
//设置退出标记
monDll.cssm_set_msg_exit_event();
}
});
//启动线程
msgThread.start();
}
//退出线程
public void endThread() throws InterruptedException
{
if (msgThread != null && msgThread.isAlive())
{
//通知并等待消息线程退出
monDll.cssm_msg_event_deinit();
}
}
public void test() throws InterruptedException
{
boolean ret1 = false;
int ret2 = 0;
CssMonMsg retMsg = null;
CssMonGrpNameArray grpArr = null;
monDll = new CssMonDLL();
//分配句柄
ret1 = monDll.cssm_init_handle();
if (ret1 == false)
{
System.out.println("dmcssm alloc handle failed!");
return;
}
else
{
System.out.println("dmcssm alloc handle success!");
}
//启动消息接收线程
startThread();
//初始化监视器,可以选择忽略-7错误(建立到所有CSS连接失败,可能当前CSS都还未启动)
ret2 = monDll.cssm_init_env(ini_path, log_path);
if (ret2 < 0 && ret2 != -7)
{
System.out.println("dmcssm init failed!");
retMsg = monDll.cssm_get_error_msg_by_code(ret2);
if (retMsg.getReturnCode() >= 0)
{
System.out.println("code:" + ret2 + "," + retMsg.getMsg());
}
//初始化失败,退出线程,销毁句柄
endThread();
monDll.cssm_free_handle();
return;
}
else
{
System.out.println("dmcssm init success!");
}
grpArr = monDll.cssm_get_n_group();
if(grpArr.getReturnCode() < 0)
{
System.out.println("get dmcssm group info failed!");
retMsg = monDll.cssm_get_error_msg_by_code(grpArr.getReturnCode());
if (retMsg.getReturnCode() >= 0)
{
System.out.println("code:" + grpArr.getReturnCode() + "," + retMsg.getMsg());
}
}
else
{
System.out.println("dmcssm get group info success, n_group:" + grpArr.getN_group());
}
//执行其他接口调用
//...
//退出消息线程
endThread();
//销毁监视器环境
monDll.cssm_deinit_env();
//销毁句柄
monDll.cssm_free_handle();
System.out.println("\ndmcssm deinit success!");
}
/**
* @param args
* @throws InterruptedException
*/
public static void main(String[] args) throws InterruptedException {
CssMonTest test = new CssMonTest();
test.test();
}
}
19.3 DMASMAPIM 接口
DMASMAPIM 接口为配置了镜像的 DMASM 专用。
镜像环境中的大部分 DMASMAPIM 接口和非镜像环境中的 DMASMAPI 接口功能保持不变,只是接口名称发生改变。非镜像环境中接口名称为 DMASM_XXX,镜像环境中接口名称为 DMASMM_XXX,均在 DMASM 后面增加一个 M。
19.3.1 DMASMAPIM 接口介绍
DMASMAPIM 提供的接口如下:
1. dmasmm_sys_init
函数原型:
ASMRETURN
dmasmm_sys_init(
sdbyte* err_desc,
udint4* err_len,
udint4 char_code,
udint4 lang_id
)
功能说明:
环境初始化接口。使用 ASMAPIM 接口,必须第一个调用 dmasmm_sys_init 接口。
参数说明:
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
char_code:输入参数,编码。0:PG_INVALID_CODE;1:PG_UTF8;2:PG_GBK;3:PG_BIG5;4:PG_ISO_8859_9;5:PG_EUC_JP;6:PG_EUC_KR;7:PG_KOI8R;8:PG_ISO_8859_1;9:PG_SQL_ASCII;10:PG_GB18030;11:PG_ISO_8859_11;12:PG_UTF16。-1 表示使用默认编码。
lang_id :输入参数,语言。0:中文;1:英文;2:繁体中文。-1 表示使用默认语言。
2. dmasmm_sys_deinit
函数原型:
void
dmasmm_sys_deinit()
功能说明:
环境销毁接口。使用 ASMAPIM 接口结束时,调用 dmasmm_sys_deinit 销毁资源。
3. dmasmm_alloc_con
函数原型:
ASMRETURN
dmasmm_alloc_con(
asmcon_handle* con,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
申请并初始化连接句柄。返回申请的连接句柄。
参数说明:
con:输入参数,连接句柄。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
4. dmasmm_close_con
函数原型:
void
dmasmm_close_con(
asmcon_handle con_in
)
功能说明:
关闭连接。关闭连接句柄,释放资源。
参数说明:
conn_in:输入参数,连接句柄。
5. dmasmm_free_con
函数原型:
void
dmasmm_free_con(
asmcon_handle con_in
)
功能说明:
释放连接句柄。
参数说明:
con_in:输入参数,连接句柄。
6. dmasmm_connect
函数原型:
ASMRETURN
dmasmm_connect(
asmcon_handle con_in,
sdbyte* username,
sdbyte* password,
sdbyte* hostname,
udint2 portnum,
asmbool* con_is_local,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
登录接口。ASMSVRM 允许本地连接和远程连接,但是 DMSERVER 仅允许本地连接,依据 con_is_local 判断是否远程连接。
参数说明:
con_in:输入参数,连接句柄。
username:输入参数,用户名。
password:输入参数,密码。
hostname:输入参数,主机 ip 或主机名。
portnum:输入参数,主机监听端口号。
con_is_local:输出参数,标识远程或本地登录。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
7. dmasmm_get_n_group
函数原型:
ASMRETURN
dmasmm_get_n_group(
asmcon_handle conn_in,
udint2* num,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
获取 ASM Disk Group 个数。获取有多少个磁盘组。
参数说明:
conn_in:输入参数,连接句柄。
num:输出参数,磁盘组个数。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
8. dmasmm_get_group_id_arr
函数原型:
ASMRETURN
dmasmm_get_group_id_arr(
asmcon_handle con_in,
udint2* id_arr,
udint4* au_size_arr,
udint4* ex_size_arr,
udint2 arr_size,
udint2* num,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
获取 ASM Disk Group ID 数组。配合 dmasmm_get_n_group 使用,获取所有 Disk Group ID。
参数说明:
conn_in:输入参数,连接句柄。
id_arr:输出参数,磁盘 ID 数组。
au_size_arr:输出参数,磁盘组 AU 大小数组。
ex_size_arr:输出参数,磁盘组 EXTENT 大小数组。此参数无实际意义,只为兼容非镜像版本。
arr_size:输入参数,数组最大长度。
num:输出参数,返回数组长度。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
9. dmasmm_get_disk_id_arr_by_group
函数原型:
ASMRETURN
dmasmm_get_disk_id_arr_by_group(
asmcon_handle con_in,
udint2 group_id,
udint2* id_arr,
udint2 arr_size,
udint2* n_disk,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
获取磁盘组内磁盘 ID 数组。根据磁盘组 ID 获取磁盘组内包含的所有磁盘 ID。
参数说明:
conn_in:输入参数,连接句柄。
group_id:输入参数,磁盘组 ID。
id_arr:输出参数,磁盘 ID 数组。
arr_size:输入参数,数组最大长度。
n_disk:输出参数,返回数组长度。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
10. dmasmm_get_disk_info
函数原型:
ASMRETURN
dmasmm_get_disk_info(
asmcon_handle conn_in,
udint2 group_id,
udint4 disk_id,
sdbyte* path,
udint2 path_buflen,
sdbyte* name,
udint2 name_buflen,
sdbyte* frp_name,
udint2 frp_buflen,
sdbyte* status,
udint2 status_buflen,
udint4* size,
udint4* free_auno,
sdbyte* create_time,
sdbyte* modify_time,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
获取 ASM 磁盘详细信息。根据磁盘组 ID 和磁盘 ID 获取 ASM 磁盘详细信息。
参数说明:
conn_in:输入参数,连接句柄。
group_id:输入参数,磁盘组 ID。
disk_id:输入参数,磁盘 ID。
path:输出参数,磁盘路径。
path_buflen:输入参数,path 缓冲区长度。最长不能超过 256 字节。
name:输出参数,磁盘名称。
name_buflen:输入参数,name 缓冲区长度。 最长不能超过 32 字节。
frp_name:输出参数,磁盘所属故障组名称。
frp_buflen:输入参数,frp_name 缓冲区长度。最长不能超过 32 字节。
status:输出参数,磁盘状态
status_buflen:输入参数,status 缓冲区长度。最长不能超过 32 字节。
size:输出参数,磁盘大小,单位 M。
free_auno:输出参数,最大 AU 号。
create_time:输出参数,磁盘创建时间。
modify_time:输出参数,磁盘最近一次修改时间。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。最长不能超过 32 字节。
11. dmasmm_drop_diskgroup_by_name
函数原型:
ASMRETURN
dmasmm_drop_diskgroup_by_name(
asmcon_handle conn_in,
sdbyte* group_name,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
删除磁盘组。
参数说明:
conn_in:输入参数,连接句柄。
group_name:输入参数,磁盘组名。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
12. dmasmm_file_create
函数原型:
ASMRETURN
dmasmm_file_create(
asmcon_handle conn_in,
asmbool p_flag,
sdbyte* filepath_in,
udint8 filesize,
asm_fhandle_t* fil_handle,
asmbool need_init,
udint2 striping_size,
udbyte redundancy_type,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
创建 ASM 文件。在 ASM 文件系统中创建 ASM 文件,如果文件父亲目录不存在,并且 p_flag 为 TRUE 的情况,会自动创建父目录,否则会报错。
参数说明:
conn_in:输入参数,连接句柄。
p_flag:输入参数,创建父目录标记。
filepath_in:输入参数,文件路径。
filesize:输入参数,文件大小,单位 Byte。
fil_handle:输出参数,文件句柄。
need_init:输入参数,是否需要初始化。
striping_size:输入参数,条带化粒度。
redundancy_type:输入参数,镜像类型。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
13. dmasmm_file_open
函数原型:
ASMRETURN
dmasmm_file_open(
asmcon_handle conn_in,
sdbyte* filepath_in,
asm_fhandle_t* fhandle,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
打开 ASM 文件,获取 ASM 文件句柄。
DMASM 文件可以重复打开,但是建议用户在使用过程中,尽量避免反复打开同一个 DMASM 文件。如果用户反复打开同一个 DMASM 文件,并且没有及时关闭文件,有可能会降低 DMASM 文件的访问效率。
DMASM 文件句柄不保证全局唯一,只保证连接级别的唯一性,一个连接重复打开同一个 DMASM 文件,会返回不同的文件句柄;不同连接打开同一个 DMASM 文件,有可能返回相同的文件句柄。
参数说明:
conn_in:输入参数,连接句柄。
filepath_in:输入参数,文件路径。
fhandle:输入参数,文件句柄。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
14. dmasmm_file_trunc
函数原型:
ASMRETURN
dmasmm_file_trunc(
asmcon_handle conn_in,
asm_fhandle_t fhandle,
udint8 truncate_size,
udint8* real_size,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
截断 ASM 文件。将 ASM 文件截断到 truncate_size,如果 truncate_size 小于文件大小,文件会被截断到 truncate_size;如果 truncate_size 大于文件大小,文件大小不变,接口返回 EC_SUCCESS。
参数说明:
conn_in:输入参数,连接句柄。
fhandle:输入参数,文件句柄。
truncate_size:输入参数,截断后的大小,单位 Byte。
real_size:输出参数,执行后实际大小,单位 Byte。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
15. dmasmm_file_extend
函数原型:
ASMRETURN
dmasmm_file_extend(
asmcon_handle conn_in,
asm_fhandle_t fhandle,
udint8 offset,
udint8 extend_size,
udint4 need_init,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
扩展 ASM 文件。将文件从 offset 偏移处,扩展 extend_size 大小,最终实际大小为 offset+extend_size。如果 offset+extend_size 大于文件大小,文件会被扩展到 offset+extend_size 大小;如果 offset+extend_size 小于文件大小,直接返回成功。
参数说明:
conn_in:输入参数,连接句柄。
fhandle:输入参数,文件句柄。
offset:输入参数,起始偏移。
extend_size:输入参数,扩展大小。
need_init:输入参数,是否需要初始化。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
16. dmasmm_file_close
函数原型:
void
dmasmm_file_close(
asmcon_handle conn_in,
asm_fhandle_t fhandle
)
功能说明:
关闭 ASM 文件。关闭打开的 ASM 文件
参数说明:
conn_in:输入参数,连接句柄。
fhandle:输入参数,文件句柄。
17. dmasmm_file_delete
函数原型:
ASMRETURN
dmasmm_file_delete(
asmcon_handle conn_in,
sdbyte* filepath_in,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
删除 ASM 文件。正在被使用的 ASM 文件不能被删除。
参数说明:
conn_in:输入参数,连接句柄。
filepath_in:输入参数,文件路径。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
18. dmasmm_file_read_by_offset
函数原型:
ASMRETURN
dmasmm_file_read_by_offset(
asmcon_handle conn_in,
asm_fhandle_t fhandle,
udint8 offset,
sdbyte* buffer,
udint4 bytes_to_read,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
从 ASM 文件读取数据。从 ASM 文件 offset 偏移读取 bytes_to_read 大小的内容到缓冲区 buffer,调用者保证缓冲区够用。因为块设备读写限制,offset, buffer, bytes_to_read 都必须能被 512 整除,否则会报错。
参数说明:
conn_in:输入参数,连接句柄。
fhandle:输入参数,文件句柄。
offset:输入参数,起始偏移。
buffer:输入参数,缓冲区。
bytes_to_read:输入参数,读取数据大小,单位 Byte。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
19. dmasmm_file_read_by_offset_normal
函数原型:
ASMRETURN
dmasmm_file_read_by_offset_normal(
asmcon_handle conn_in,
asm_fhandle_t fhandle,
udint8 offset,
sdbyte* buffer,
udint4 bytes_to_read,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
从 ASM 文件读取数据。从 ASM 文件 offset 偏移读取 bytes_to_read 大小的内容到缓冲区 buffer,调用者保证缓冲区够用。该接口支持 offset、buffer、bytes_to_read 不是 512 整数倍,但是性能比 dmasmm_file_read_by_offset 慢。
参数说明:
conn_in:输入参数,连接句柄。
fhandle:输入参数,文件句柄。
offset:输入参数,起始偏移。
buffer:输入参数,缓冲区。
bytes_to_read:输入参数,写取数据大小,单位 Byte。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
20. dmasmm_file_write_by_offset
函数原型:
ASMRETURN
dmasmm_file_write_by_offset(
asmcon_handle conn_in,
asm_fhandle_t fhandle,
udint8 offset,
sdbyte* buffer,
udint4 bytes_to_write,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
将数据写入 ASM 文件。将缓冲区中的内容写入 ASM 文件,从 offset 偏移开始。因为块设备读写限制,offset,buffer 地址,bytes_to_write 都必须能被 512 整除。
参数说明:
conn_in:输入参数,连接句柄。
fhandle:输入参数,文件句柄。
offset:输入参数,起始偏移。
buffer:输入参数,缓冲区。
bytes_to_write:输入参数,写数据大小,单位 Byte。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
21. dmasmm_file_write_by_offset_normal
函数原型:
ASMRETURN
dmasmm_file_write_by_offset_normal(
asmcon_handle conn_in,
asm_fhandle_t fhandle,
udint8 offset,
sdbyte* buffer,
udint4 bytes_to_write,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
将数据写入 ASM 文件。将缓冲区中的内容写入 ASM 文件,从 offset 偏移开始。该接口支持 offset、buffer、bytes_to_write 不是 512 倍数,但是性能比 dmasmm_file_write_by_offset 慢。
参数说明:
conn_in:输入参数,连接句柄。
fhandle:输入参数,文件句柄。
offset:输入参数,起始偏移。
buffer:输入参数,缓冲区。
bytes_to_write:输入参数,写数据大小,单位 Byte。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
22. dmasmm_file_copy
函数原型:
ASMRETURN
dmasmm_file_copy(
asmcon_handle conn_in,
sdbyte* source_in,
sdbyte* dest_in,
asmbool bOverwriteIfExists,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
文件拷贝操作。支持 ASM 文件拷贝到 ASM 文件;ASM 文件拷贝到普通文件系统文件;普通文件系统文件拷贝到 ASM 文件系统;不支持普通文件拷贝到普通文件。bOverwriteIfExists:0 或者 NULL 表示不覆盖,其他非 0 值表示覆盖。
参数说明:
conn_in:输入参数,连接句柄。
source_in:输入参数,源文件路径。必须是全路径,不能是相对路径。
dest_in:输入参数,目标文件路径。必须是全路径,不能是相对路径。
bOverwriteIfExists:输入参数,如果目标存在是否删除。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
23. dmasmm_dir_create
函数原型:
ASMRETURN
dmasmm_dir_create(
asmcon_handle conn_in,
asmbool p_flag,
sdbyte* fdir_in,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
创建目录。ASM 文件系统创建目录,当 p_flag=TRUE 时会级联创建父目录,否则父目录不存在会报错。
参数说明:
conn_in:输入参数,连接句柄。
p_flag:输入参数,是否级联创建父目录。
fdir_in:输入参数,目录路径。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
24. dmasmm_dir_delete
函数原型:
ASMRETURN
dmasmm_dir_delete(
asmcon_handle conn_in,
sdbyte* fdir_in,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
删除目录,以及目录下面所有的文件。
参数说明:
conn_in:输入参数,连接句柄。
fdir_in:输入参数,目录路径。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
25. dmasmm_get_file_num_by_group
函数原型:
ASMRETURN
dmasmm_get_file_num_by_group(
asmcon_handle conn_in,
udint2 group_id,
udint4* num,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
获取磁盘组内总的文件个数。根据磁盘组 ID 获取总的文件个数,包括文件和目录。
参数说明:
conn_in:输入参数,连接句柄。
group_id:输入参数,磁盘组的 ID 。
num :输出参数,文件的个数。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
26. dmasmm_get_file_info
函数原型:
ASMRETURN
dmasmm_get_file_info(
asmcon_handle conn_in,
asm_fhandle_t file_id,
ASM3_FILE_ATTR* fattr_out,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
获取 ASM 文件详细信息。
ASM3_FILE_ATTR 包括:
type:目录标记,整型。1 表示文件,2 表示目录。
name:文件名称,字符型。
full_path:完整路径,字符型。
size:文件大小,整型,单位 Byte。目录忽略此字段。
c_time:创建时间,time_t 类型。
m_time:修改时间,time_t 类型。
group_id:所在磁盘组编号,整型。
disk_id:inode 项所在磁盘 ID,整型。
disk_auno:inode 项所在磁盘 AU 编号,整型。
offset:inode 项 AU 偏移,整型。
fil_id:文件句柄,asm_fhandle_t 类型。
strip:文件条带化粒度,整型。
n_copy:文件镜像类型,即副本数,整型。
fil_id:文件句柄。
strip:文件条带化粒度。
n_copy:文件镜像类型,即副本数。
参数说明:
conn_in:输入参数,连接句柄。
file_id:输入参数,打开的文件句柄。
fattr_out:输出参数,文件属性结构。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
27. dmasmm_get_group_info_by_name
函数原型:
ASMRETURN
dmasmm_get_group_info_by_name(
asmcon_handle con_in,
sdbyte* group_name,
udint2* group_id,
udint2* status,
udint2* n_disk,
udint4* total_size,
udint4* free_size,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
通过磁盘组名获取磁盘组详细信息。
参数说明:
con_in:输入参数,连接句柄。
group_name:输入参数,磁盘组名字。
group_id:输出参数,磁盘组 ID。
status:输出参数,磁盘组状态。1:正在创建中;2:正常的;3:正在删除中。
n_disk:输出参数,磁盘数。
total_size:输出参数,磁盘组大小,单位 AU。
free_size:输出参数,磁盘组空闲大小,单位 AU。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
28. dmasmm_get_group_info_by_id
函数原型:
ASMRETURN
dmasmm_get_group_info_by_id(
asmcon_handle con_in,
udint2 group_id,
sdbyte* group_name,
udint2 name_buflen,
udint2* status,
udint2* n_disk,
udint4* total_size,
udint4* free_size,
udint4* au_size,
byte* n_copy,
udint4* redo_size,
udint2* rbl_stat,
udint2* rbl_pwr,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
通过磁盘组 ID 获取磁盘组详细信息。
参数说明:
con_in:输入参数,连接句柄。
group_id:输入参数,磁盘组 ID。
group_name:输出参数,磁盘组名字。
name_buflen:输入参数,磁盘组的 buf 长度。
status:输出参数,磁盘组状态。1:正在创建中;2:正常的;3:正在删除中。
n_disk:输出参数,磁盘数。
total_size:输出参数,磁盘组大小,单位 AU。
free_size:输出参数,磁盘组空闲大小,单位 AU。
au_size:输出参数,磁盘组 AU 大小,单位 Byte。
n_copy:输出参数,磁盘组镜像类型。
redo_size:输出参数,磁盘组中 redo 日志文件大小。
rbl_stat:输出参数,磁盘组重平衡状态。0:未启用;1:已启用。
rbl_pwr:输出参数,磁盘组重平衡并行度。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
29. dmasmm_dir_get_first
函数原型:
ASMRETURN
dmasmm_dir_get_first(
asmcon_handle conn_in,
sdbyte* path_in,
sdbyte* suffix,
asm_dhandle_t* dir_handle_out,
ASM3_FILE_ATTR* fattr_out,
asmbool* exist_flag,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
获取目录下第一个文件信息。
参数说明:
conn_in:输入参数,连接句柄。
path_in:输入参数,目录路径。
suffix:输入参数,指定扩展名关键字,如:”.log”。用于取出以指定关键字作为扩展名的文件。
dir_handle_out:输出参数,打开的目录句柄。
fattr_out:输出参数,文件属性结构。
exist_flag:输出参数,是否存在。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
30. dmasmm_dir_get_next
函数原型:
ASMRETURN
dmasmm_dir_get_next(
asmcon_handle conn_in,
asm_dhandle_t dir_handle,
sdbyte* path_in,
sdbyte* suffix,
ASM3_FILE_ATTR* fattr_out,
asmbool* exist_flag,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
获取目录下下一个文件信息,须配合函数 dmasmm_dir_get_first 使用。
参数说明:
conn_in:输入参数,连接句柄。
dir_handle:输入参数,打开的目录句柄。
path_in:输入参数,目录路径,须与目录句柄 dir_handle 中打开的 path_in 保持一致。
suffix:输入参数,指定扩展名关键字,如:”.log”。用于取出以指定关键字作为扩展名的文件。
fattr_out:输出参数,文件属性结构。
exist_flag:输出参数,是否存在。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
31. dmasmm_dir_close
函数原型:
ASMRETURN
dmasmm_dir_close(
asmcon_handle conn_in,
asm_dhandle_t dir_handle,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
关闭目录。
参数说明:
con_in:输入参数,连接句柄。
dir_handle:输入参数,打开的目录句柄。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
32. dmasmm_file_attributes_get
函数原型:
ASMRETURN
dmasmm_file_attributes_get(
asmcon_handle conn_in,
sdbyte* path,
ASM3_FILE_ATTR* fattr_out,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
根据文件路径获取文件详细信息。
参数说明:
conn_in:输入参数,连接句柄。
path:输入参数,路径。
fattr_out:输出参数,文件属性结构。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
33. dmasmm_file_is_exist
函数原型:
ASMRETURN
dmasmm_file_is_exist(
asmcon_handle conn_in,
sdbyte* path,
sdbyte* err_desc,
udint4* err_len
)
功能说明:
判断 ASM 文件系统中,以 path 为文件路径的文件是否存在。
参数说明:
conn_in:输入参数,连接句柄。
path:输入参数,文件路径。
err_desc:输出参数,错误描述信息。
err_len:输入输出参数,错误描述信息长度。
19.3.2 返回值说明
返回值分为三种类型:正数,0 和负数。0 表示正常;正数为警告信息;负数为错误信息,对应的错误码请参考 19.3.3 错误码汇编。
19.3.3 错误码汇编
DMASMAPIM 和 DMASMAPI 共用一套错误码。具体请参考 19.1.3 错误码汇编。
19.3.4 编程示例
下面举一个简单的例子,展示 DMASMAPIM 的使用方法。若本示例在编译过程中出现实参过多或者变量未声明等问题,可查询相应版本的 DMASMAPIM 接口使用手册,适当增减参数或者将变量改为实际值。
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "asmapi3.h"
#define TRUE 1
#define FALSE 0
#define IS_SUCCESS(code) ((sdint4)code >= 0)
#define RET_IF_ERR_EX(c, act) \
{ if (!IS_SUCCESS(c)) { {act;} return (c); }}
/*运行前修改file_name username passwd ip port
镜像不支持远程写,示例程序需要和服务端在同一台机器
LINUX下编译
gcc -DLINUX -I/home/test/include test.c -L. -ldmasmapim -o demo
-I:指定头文件目录,本例中需要指定asmapi3.h头文件所在目录
-L(大写L):指定库搜索路径
-l(小写L):指定库名
-D:定义预处理宏*/
int
main(
int argc,
char* argv[]
)
{
int code = 0;
char err_desc[1024];
int err_len;
asm_fhandle_t fil_handle;
void* conn;
char* wbuf = "hello asm";
char rbuf[10];
int len;
int file_size = 20; //单位字节
int offset = 0;
int strip_size = 0; //条带大小
int redundancy_type = 1; //镜像类型
char* username = "ASMSYS";
char* passwd = "DCRpsd_123";
char* file_name = "+DATA/test1.dta";
char* ip = "192.168.1.118";
int port = 10060;
#ifdef WIN32
/*windows环境需要添加附加依赖项ws2_32.lib*/
WSADATA WsaData;
if (SOCKET_ERROR == WSAStartup(0x0101, &WsaData))
{
fprintf(stderr, "WSAStartup Failed\n");
exit(-1);
}
#endif
err_len = sizeof(err_desc);
len = (int)strlen(wbuf);
code = dmasmm_sys_init(err_desc, &err_len, -1, 1);
if (!IS_SUCCESS(code))
{
fprintf(stderr, "dmasmm_sys_init error:[%s]\n", err_desc);
return -1;
}
/* 分配连接句柄 */
code = dmasmm_alloc_con(&conn, err_desc, &err_len);
if (!IS_SUCCESS(code))
{
fprintf(stderr, "dmasmm_alloc_con error:[%s]\n", err_desc);
return -1;
}
/* 登录asmsvr,本地登录不校验密码,可以输入任意字符串,远程登录会校验用户名密码*/
code = dmasmm_connect(conn, username, passwd, ip, port, NULL, err_desc, &err_len);
if (!IS_SUCCESS(code))
{
fprintf(stderr, "dmasmm_connect error:[%s]\n", err_desc);
return -1;
}
/* 文件存在直接打开 */
if (dmasmm_file_is_exist(conn, file_name, err_desc, &err_len) == TRUE)
{
code = dmasmm_file_open(conn, file_name, &fil_handle, err_desc, &err_len);
RET_IF_ERR_EX(code, goto fun_end);
}
else
{
/* 在已有的磁盘组内创建asm文件, */
code = dmasmm_file_create(conn, 1, file_name, file_size, &fil_handle, FALSE, strip_size, redundancy_type, err_desc, &err_len);
if (!IS_SUCCESS(code))
{
fprintf(stderr, "dmasmm_file_create error code:%d [%s]\n", code, err_desc);
goto fun_end;
}
}
/* 写文件 */
code = dmasmm_file_write_by_offset_normal(conn, fil_handle, offset, wbuf, len, err_desc, &err_len);
if (!IS_SUCCESS(code))
{
fprintf(stderr, "dmasmm_file_write_by_offset_normal error code:%d [%s]\n", code, err_desc);
goto fun_end;
}
/* 读文件 */
code = dmasmm_file_read_by_offset_normal(conn, fil_handle, offset, rbuf, len, err_desc, &err_len);
if (!IS_SUCCESS(code))
{
fprintf(stderr, "dmasmm_file_write_by_offset_normal error code:%d [%s]\n", code, err_desc);
goto fun_end;
}
else
{
rbuf[len] = '\0';
fprintf(stderr, "dmasmm_file_write_by_offset_normal succ buf:%s\n", rbuf);
}
fun_end:
// 文件存在就关闭删除
if (dmasmm_file_is_exist(conn, file_name, err_desc, &err_len) == TRUE)
{
/* 关闭打开的文件句柄,否则删除会报错 */
dmasmm_file_close(conn, fil_handle);
/* 删除文件 */
code = dmasmm_file_delete(conn, file_name, err_desc, &err_len);
if (!IS_SUCCESS(code))
{
fprintf(stderr, "dmasmm_file_delete error:[%s]\n", err_desc);
}
}
dmasmm_close_con(conn);
dmasmm_free_con(conn);
dmasmm_sys_deinit();
return 0;
}