gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:54:09 27 4
gpt4 key购买 nike

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

假设我有一个具有以下规范的全局变量在文件中:/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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com