cfgncb 配置通知控制块

用途

包含每次使用 SYS_SETPARMS 命令调用 sysconfig 子例程时所调用的通知例程的地址。

语法

int func (cmd, cur, new)
int cmd;
struct var *cur;
struct var *new;

参数

描述
cmd 指示当前操作类型。 可能的值为 CFGV_PREPARECFGV_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       */
   };
   

可以使用 CfgndelCfgnadd 内核服务从 国际工业联合会 /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 命令上,通知例程将通过将更多缓冲区链接到现有缓冲区列表,使其他缓冲区可供用户使用。