c - C内核编程中的invbool有什么意义?

标签 c linux-kernel boolean

我开始做更多的内核编程,在阅读中发现invbool的存在.但是,我似乎在互联网上找不到任何关于它的信息,除了记录在案的定义,在几个地方几乎逐字复制:

The invbool type inverts the value, so that true values become false and vice versa.


考虑到这一点,我想不出这样可以使代码不那么困惑的例子。有没有一个很好的例子说明你什么时候会使用它?为什么它似乎只出现在内核编程文档中?

最佳答案

invbool函数用于解析内核命令行和模块选项。 bool版本解析用户可以设置为0/1的选项或 N/Yoff/on , 并设置 bool相应地标记。 invbool版本适用 !结果,所以Y映射到 falseN映射到 true .
据我所知,当程序员想要一个与用户配置参数相反的内部标志时,它们的唯一目的是为了方便或“清晰”。例如,从用户的角度来看,能够设置一个标志来禁用 foo 选项可能更有意义(因为它应该默认启用),但从内核程序员的角度来看,拥有一个简单的标志更方便表示是否启用了 foo。然后您可以有一个名为 disable_foo 的用户设置参数。和一个名为 foo_is_enabled 的内部 boolean 标志.你想要foo_is_enabled = false当用户指定 disable_foo=Y , 所以你可以使用 invbool这里。
您可以在 aty128fb.c 中看到类似的情况。 :用户可以设置nomtrr用于禁用内存类型范围寄存器的参数,但程序员更喜欢使用 boolean 变量 mtrrtrue如果启用了 MTRR。
你可能认为这些是多余的,因为你可以只做 mtrr = !parameter_bool("nomtrr") , 但实际上 param_set_*函数通过引用而不是按值返回参数值,所以你不能这么简单地扑通一声 !进入表达式。
我怀疑这个想法是定义这些函数使这样的代码更加“自我记录”。这当然值得商榷。

关于c - C内核编程中的invbool有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67185055/

相关文章:

c++ - 现代 C 和 C++ : it is possible to use one defined structure for other declared structure?

linux-kernel - 如何使用 BPF 过滤核函数参数?

linux - linux如何在应用程序中加载库

go - 如何检查结构中的 bool 是否已更改为 false 或者它是否已经为 false

c++ - 什么时候整数到浮点转换无损?

c - 类型转换 void 指针到 int 和 string

c - 如何在 [C] 中编写正确的循环

c - 来自用户空间的 sysfs 文件中的 poll() 和来自内核空间的 sysfs_notify() 不会一起工作

c# - 当 x 和 y 都为真时, "x & y"怎么可能为假呢?

postgresql - 具有 NULL 值的 bool_and 和 bool_or 的行为