代码库是FreeBSD11.1
代码:
****
* Attempt on implementing own sycstl
****/
#include<sys/cdefs.h>
#include<sys/param.h>
#include<sys/kernel.h>
#include<sys/systm.h>
#include<sys/types.h>`
#include<sys/sysctl.h>
int thats_my_stat_var=1; /*it won't work also when declared as static int*/
int thats_my_stat_var2=2;
/*I tried with this and without this, it's unrolls to an extern anyway*/
SYSCTL_DECL(_user);
SYSCTL_INT(_user,OID_AUTO,
thats_my_stat_var,CTLFLAG_RW|CTLFLAG_ANYBODY,
&thats_my_stat_var,1,"Static one");
SYSCTL_INT(_user,OID_AUTO,
thats_my_stat_var2,CTLFLAG_RW|CTLFLAG_ANYBODY,
&thats_my_stat_var2,2,"Static two");
我将它作为文件kern / subr_examplectl.c添加到文件列表sys / conf / files中,它的位置是这样的-包括前3行和后3行,以便您了解我放置该文件的位置 代码:
kern/vfs_subr.c standard
kern/vfs_syscalls.c standard
kern/vfs_vnops.c standard
kern/subr_examplectl.c standard
#
它不会在列表中显示新变量,但是当我指定sysctl变量的名称时可以显示它-但是它没有值,为什么我要设置一个值却只有一个错误
$sysctl user.thats_my_stat_var #yes nothing is displayed as result of this command
让我们检查是否有可能获得描述。
$sysctl -d user.thats_my_stat_var #this one prints out description
user.thats_my_stat_var: Static one
这确实有效。
试图设置一个值。
$ sysctl user.thats_my_stat_var2=11
sysctl: user.thats_my_stat_var2=11: Operation not permitted
不,这不起作用。
这里的安全级别似乎不是问题:
$sysctl kern.securelevel
kern.securelevel: -1
这里缺少什么?我不知道怎么回事。是否缺少任何导出宏?还是我没有导入某些特定的标头,或者我也必须将该文件添加到其他位置?
似乎在源代码/手册/书和其他手册中没有足够公开地声明某些内容,或者最近对其进行了更改。我可以访问的所有资源都对sysctls的任何其他要求保持沉默。没有root用户,也没有普通用户能够加载他们的值或设置/更改它们。但是也许我想念一些东西。不知道。到目前为止,我可能还无法将其与任何特定原因联系起来。如果解决方案很简单,我至少需要一个提示或开放性地指出我可能很愚蠢。