返回首页

gbase数据、南大通用产品文档:GBase8ssqlsignal() 函数

更新日期:2024年09月11日

sqlsignal() 函数启用或禁用 GBase 8s ESQL/C 库处理的信号的信号处理。

语法

void sqlsignal(sigvalue, sigfunc_ptr, mode)

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 948 -

mint sigvalue;
void (*sigfunc_ptr) (void);
int mode;
sigvalue
需要捕获的特定的信号的 mint 值(如 signal.h) 定义的那样)。
当前,此参数是未来设计功能的占位符。请将此参数初始化为 -1。

sigfunc_ptr
指向用户定义的函数的指针,其不带参数,来为 sigvalue 信号作为信号句柄调用。
当前,此参数是未来设计功能的占位符。请将此参数初始化为指向不接收参数的函数
的空指针。

mode
可为三种可能的模式之一:
0
初始化信号处理。
1
禁用信号处理。
2
重新启用信号处理。

用法

sqlsignal() 函数当前仅为 SIGCHLD 信号提供处理。在有些情况下,在应用程序结束
之后,defunct 子进程保持。如果应用程序不清理这些进程,则它们导致进程 ID 不必要的
使用,并增加您用尽进程的风险。对于客户机-服务器通讯,当应用程序使用管道时(即,
sqlhosts 文件的 nettype 字段为 ipcpip),此行为才显而易见。对于其他通讯机制,你无
需调用 sqlsignal()(例如, tlipcp 的 nettype)。

sqlsignal() 的 mode 参数确定 sqlsignal() 执行的任务,如下:
设置 mode 为 0 来初始化信号处理。
sqlsignal(-1, (void (*)(void))0, 0);


GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 949 -

当您以 sqlsignal() 来初始化信号处理时,GBase 8s ESQL/C 库捕获 SIGCHLD 信号
来处理 defunct 子进程的清除。
此初始的 sqlsignal() 调用必须发生在您的应用程序的开头,
在程序中的第一个 SQL 语句之前。如果您省略此初始的调用,则在您的程序中,稍后不
可开启信号处理能力。

启用或禁用信号处理。

如果您想要让 GBase 8s ESQL/C 库为程序的部分执行信息处理,且您自己的代码为
其他部分执行信号处理,则您可采取下列行动:
要禁用信号处理,
请以设置为 1 的 mode 调用 sqlsignal(),
在您想要您的程序处理信
号的点处:
sqlsignal(-1, (void (*)(void))0, 1);
要重新启用信号处理,
请以设置为 2 的 mode 来调用 sqlsignal(),
在您想要 GBase 8s
ESQL 库处理信号的点处:
sqlsignal(-1, (void (*)(void))0, 2);
当您以 sqlsignal() 初始化 SIGCHLD 信号处理时,您允许 GBase 8s ESQL/C 库处理
SIGCHLD 清除。否则,如果 defunct 子进程是个问题,则您的应用程序必须执行对这些
进程的清理。

通过上述步骤完成了CM1:192.168.5.201节点的准备工作,本次我们的集群由2个节点
组成,因此重复上述步骤再准备CM2:192.168.5.202节点,这个节点与第1个节点设置上有
如下不同:

ifx_rc_isnull() 函数返回指示行或集合是否为空的值。
语法
ifx_rc_isnull(nullflag, rchandle)
参数
该函数接受以下参数。
参数
类型
用于
描述
nullflag
SQL_SMALLINT
输出
指示行或集合是否为空的标志。
值可能
为:
l
TRUE
l
FALSE
rchandle
HINFX_RC
输入
行或集合的句柄
用法
ifx_rc_isnull() 函数返回指示行或集合是否为空的值。