2013-02-28 169 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)來獲取或設置系統信息。