2013-02-28 167 views
0

一个内核变量,我发现这个话题在网上的一些资源,但是仍然无法理解它是如何工作的。呼叫在freebsd

让我们假设我有一个文件下面的说明 一个全局变量:/sys/sys/sysctl.h

#define USER_TZNAME_MAX  20 /*test var*/ 

,并在文件/usr/src/sys/kern/kern_mib.ca

SYSCTL_INT(_user, USER_TZNAME_MAX, tzname_max, CTLFLAG_RW, 0, 0, "something"); 

任何人都可以实际显示如何更改变量值并在ac源文件中设置另一个值?

谢谢

回答

0

#define USER_TZNAME_MAX定义一个全局变量,它是一个预处理宏。

之前的编译器编译预处理程序运行,扩大宏和包括/通过定义定义排除的代码。

在一个实例中,如本,预处理器将替换字符串“USER_TZNAME_MAX”的所有实例中使用字符串“20”的来源:

// this 
int i = USER_TZNAME_MAX; 

// will be expanded to this: 
int i = 20; 

因此你不能改变这个可变在运行时,因为a)它不是一个变量,并且b)它是一个常量。

如果你在谈论改变你自己的代码中使用,你可以做到这一点的价值:

#ifdef USER_TZNAME_MAX 
#undef USER_TZNAME_MAX 
#endif 

#define USER_TZNAME_MAX (32) 
+0

我拿起这个变量只是作为一个例子。那么命令如何:sysctl -w variablenewvalue。这是我想从我的代码中完成的。我想chande并在代码中访问user.tzname_max的实际值,这是从命令行运行后打印的结果sysctl user.tzname_max – Iogan 2013-02-28 14:15:30

0

在程序,你应该使用sysctl(3)来获取或设置系统信息。