cfgncb 配置通知控制块
用途
包含每次使用 SYS_SETPARMS 命令调用 sysconfig 子例程时所调用的通知例程的地址。
语法
int func (cmd, cur, new)
int cmd;
struct var *cur;
struct var *new;参数
| 项 | 描述 |
|---|---|
| cmd | 指示当前操作类型。 可能的值为 CFGV_PREPARE 和 CFGV_COMMIT,如 /usr/include/sys/sysconfig.h 文件中所定义。 |
| cur | 指向用于表示系统可配置变量的当前值的 瓦尔 结构。 |
| 新建 | 指向表示系统可配置变量的新值或建议值的 瓦尔 结构。 |
库尔 和 新 瓦尔 结构都包含在系统地址空间中。
描述
此配置通知控制块包含通知例程的地址。 此结构旨在用作由内核维护的类似控制块的列表中的列表元素。
每个控制块都具有以下定义:
struct cfgncb {
struct cfgncb *cbnext; /* next block on chain */
struct cfgncb *cbprev; /* prev control block on chain */
int (*func)(); /* notification function */
};
可以使用 Cfgndel 或 Cfgnadd 内核服务从 国际工业联合会 /confederation of 列表中添加或删除 国际工业联合会 /confederation of 控制块。 要使用这些内核服务中的任何一个,调用例程必须定义 国际工业联合会 /confederation of 控制块。 可以使用 /usr/include/sys/sysconfig.h 文件来完成此定义。
每次发出 SYS_SETPARMS sysconfig 命令 时, sysconfig 子例程都会在 国际工业联合会 /confederation of 块的内核列表中进行迭代,并使用 CFGV_PREPARE 命令调用每个通知例程。 此调用表示针对通知例程的两个传递进程的第一次传递。
在 CFGV_PREPARE 命令上, cfgncb.func 通知例程应确定是否更改了任何相关值。 应该检查所有已更改的值是否有效。 如果这些值有效,那么应该 0 返回返回码 0。 否则,应该返回一个返回值,该值指示 新 瓦尔 结构中第一个出错字段的字节偏移量。
如果 0 已注册的通知例程都创建返回码 0 ,那么在有效性检验期间未检测到任何值错误。 在这种情况下, sysconfig 子例程发出对 cfgncb.func 例程的第二次传递调用,并发送相同的参数,尽管 cmd 参数包含值 CFGV_COMMIT。 这表明新值将在最早的机会生效。
以下可能是通知例程处理的一个示例。 假定用户想要增加块 I/O 缓冲区高速缓存的大小。 在 CFGV_PREPARE 命令上,块 I/O 通知例程将验证所建议的高速缓存新大小是否合法。 然后,在 CFGV_COMMIT 命令上,通知例程将通过将更多缓冲区链接到现有缓冲区列表,使其他缓冲区可供用户使用。