从c代码调用freebsd中的内核变量

标签 c global-variables variable-assignment freebsd

我找到了一些关于这个主题的在线资源,但仍然无法理解它是如何工作的。

假设我有一个具有以下规范的全局变量 在文件中:/sys/sys/sysctl.h

#define USER_TZNAME_MAX     20   /*test var*/

并在文件/usr/src/sys/kern/kern_mib.c 中

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

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

谢谢

最佳答案

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

在编译器编译代码之前,预处理器会运行以扩展宏并包含/排除定义所定义的代码。

在这样的示例中,预处理器将用字符串“20”替换源中字符串“USER_TZNAME_MAX”的所有实例:

// 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)

关于从c代码调用freebsd中的内核变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15128197/

相关文章:

reactjs - 如何在 React JS 中访问全局 (window.) 变量

python - 是否可以在 Python 中进行多行分配?

c - (char)0 和 '\0' 有什么区别?在 C

c - strtok() 读取字符串末尾的空格并且不返回 NULL

c - 什么时候应该使用 VS2015 平台工具集 V140_XP?

jquery - 如何在 JQuery 中获取和设置全局 .class 级别的 css 值

javascript - 如何在 vue.js 中全局公开 app.vue 中的变量

python - Python中a -= b和a = a - b之间的区别

java - 队列作为链表实现

c - 将 go linker 构建为独立工具