linux tricks 之 BUILD_BUG_ON_ZERO.】的更多相关文章

------------------------------------------- 本文系作者原创, 欢迎大家转载! 转载请注明出处:netwalker.blog.chinaunix.net -------------------------------------------   尽管在大多数时候只需关心代码运行的正确性,但是很多时候需要在编译期间就发现这些潜在的致命错误.内核提供了两个有力的宏定义: include/linux/kernel.h /* Force a compilatio…
------------------------------------------- 本文系作者原创, 欢迎大家转载! 转载请注明出处:netwalker.blog.chinaunix.net ------------------------------------------- 1.FIELD_SIZEOF获取成员大小   FIELD_SIZEOF用来获取成员大小.它需要两个参数,第一个指定结构体的类型,第二个则指明成员的名字.   include/linux/kernel.h #defin…
转载:http://blog.chinaunix.net/uid-20608849-id-3027972.html 由于内核中定义了很多复杂的数据结构,而它们的实例中的成员在作为函数参数传递的时,函数中可能需要对它的包含者中的其他的兄弟成员进行处理,这就需要只根据成员地址就可以获取整个结构体变量的地址的操作.container_of提供了这样的操作: include/linux/kernel.h /** * container_of - cast a member of a structure…
------------------------------------------- 本文系作者原创, 欢迎大家转载! 转载请注明出处:netwalker.blog.chinaunix.net ------------------------------------------- 通过位图提供的两种状态可以在非常节约内存的情况下表示开关变量,并且同类这类变量可以紧凑而高效的统一进行处理.有很多内核子系统都需要位图的支持,但是不同的情况又需要不同的位图个数,比如SMP系统上的CPU位图cpuma…
转载:http://blog.chinaunix.net/uid-20608849-id-3027953.html   内核为了保持最大的兼容性和代码灵活性,不可能直接对某个数据类型定义它的大小范围.但是很多时候又要用到这些最大值最小值或者该数据类型可以表示的数据范围,比如初始化一个值为最大/小值,或者检验数据是否位于某个类型的范围内.   include/linux/kernel.h #define USHORT_MAX ((u16)(~0U)) #define SHORT_MAX ((s16…
VA函数(variable argument function),参数个数可变函数,又称可变参数函数.C/C++编程中,系统提供给编程人员的va函数很少.*printf()/*scanf()系列函数,用于输入输出时格式化字符串:exec*()系列函数,用于在程序中执行外部文件(main(int argc, char* argv[]算不算呢,与其说main()也是一个可变参数函数,倒不如说它是exec*()经过封装后的具备特殊功能和意义的函数,至少在原理这一级上有很多相似之处).由于参数个数的不确…
typeof是gcc的扩展功能,比较简单,是用来取得参数类型,具体可参考gcc官网的解释. https://gcc.gnu.org/onlinedocs/gcc/Typeof.html ------------------------------------------- 本文系作者原创, 欢迎大家转载! 转载请注明出处:netwalker.blog.chinaunix.net ------------------------------------------- 由于Linux代码采用Gcc编…
------------------------------------------- 本文系作者原创, 欢迎大家转载! 转载请注明出处:netwalker.blog.chinaunix.net ------------------------------------------- 内核在某些应用中,为了实现某种机制,比如分页,或者提高访问效率需要保证数据或者指针地址对齐到某个特定的整数值,比如连接代码脚本.这个值必须是2N.数据对齐,可以看做向上圆整的一种运算. include/linux/k…
Environment Settings Path Globally set path is in /etc/profile; or the user's .bash_profile for particular user Adding a Directory to the path Setting Your Path Variable Loadable Kernel Modules lsmod shows loaded loadable kernel modules rmmod removes…
转载:http://stackoverflow.com/questions/1010922/question-about-round-up-macro 以下内容转载自stackoverflow关于 roundup 系列函数的讨论,已经解释的很详细了,不需要添加新内容. #define ROUND_UP(N, S) ((((N) + (S) - 1) / (S)) * (S)) With the above macro, could someone please help me on unders…