动态添加条目到 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 类选择器