动态添加条目到 sysctl

Posted

技术标签:

【中文标题】动态添加条目到 sysctl【英文标题】:Dynamically adding entries to sysctl 【发布时间】:2013-12-08 11:10:17 【问题描述】:

考虑这段代码:

int procmon_state = 0;
static struct ctl_table_header *procmon_table_header;

static ctl_table state_table[] = 
    
        .procname = "state", .mode = 0666,
        .proc_handler = &proc_dointvec_minmax,
        .data = &procmon_state, .maxlen = sizeof(int),
        .extra1 = "\x00\x00\x00\x00" /*0*/, .extra2 = "\x01\x00\x00\x00" /*1*/
    ,
     0 
;

static ctl_table procmon_table[] = 
    
        .procname = "procmon", .mode = 0555,
        .child = state_table
    ,
     0 
;

procmon_table_header = register_sysctl_table(procmon_table);

这将在/proc/sys 中创建一个条目(这样我就可以只使用sysctl procmon.state=1)。

我的问题是:创建该条目后,如何添加更多条目?

编辑:procmon 中有更多条目,也就是说。例如,procmon.another_state

【问题讨论】:

可能是register_sysctl_paths 有帮助吗? 我会看proc_create_data() 确实,register_sysctl_paths 可能会有所帮助。我去看看,谢谢!另一方面,proc_create_data 它太新了(仅限 3.10+),即使我希望我不能使用它。 上面的源码应该加在sysctl.h文件里面吧? @SowndaryaK 这是你的内核模块代码的一部分 【参考方案1】:

是的,您可以,只需查看 linux 内核的驱动程序目录中的许多示例即可。本质上,您只需要多次调用 register_sysctl_table() ,对于您进行的每次调用,您都将在现有分支上创建一个分支。

这里有详细介绍:

https://tthtlc.wordpress.com/2016/05/26/how-to-add-new-entries-to-sysctl-with-the-same-root/

【讨论】:

【参考方案2】:

sysctl.h 中没有更改 sysctl 表的功能。

在调用register_sysctl_table之前,您必须列出所有可能需要的条目

如果你之后确实需要更改表,你必须在进行修改之前调用unregister_sysctl_table,然后重新注册。

【讨论】:

以上是关于动态添加条目到 sysctl的主要内容,如果未能解决你的问题,请参考以下文章

在 PHP 条目被动态调用到 DOM 之后添加 jquery 一个 href 类选择器

Xamarin动态添加和放置条目。

通过asp.net中的代码向网页添加按钮并删除动态数据库条目

如何在html表中动态添加条目行?

通过Excel添加动态域

用于动态多组条目的组件