Fork me on GitHub

随笔分类 -  C Programming

摘要:所谓的MODULE_SOFTDEP,就是两个两个模块之间本有依赖,但是一定要要加载顺序的要求。 用法很简单。 #define MODULE_SOFTDEP(_softdep) MODULE_INFO(softdep, _softdep) 举例如下: MODULE_SOFTDEP("pre: modu 阅读全文
posted @ 2024-08-25 15:53 yooooooo 阅读(130) 评论(0) 推荐(0) 编辑
摘要:在Linux内核编程中,READ_ONCE 宏用于确保从内存中读取一个变量的值时,编译器不会对这个读取操作进行优化,从而保证了读取操作的原子性。这个宏通常在需要防止编译器优化、多线程或中断上下文中使用,以确保数据的一致性和正确性。 以下是 READ_ONCE 宏的定义及其解释: #define RE 阅读全文
posted @ 2024-05-29 15:21 yooooooo 阅读(305) 评论(0) 推荐(0) 编辑
摘要:C语言三个点...表示什么意思 可变参数 数组批量赋相同值 一种数组赋值方法 1,可变参数 当参数个数可变的时候会使用三个点来表示,比如内核中的printk的定义: static inline int printk(const char *fmt, ...) 2.数组批量赋相同值 比如指定从某个下标 阅读全文
posted @ 2021-03-17 15:21 yooooooo 阅读(788) 评论(0) 推荐(0) 编辑
摘要:0x00 宏的基本知识 替换列表和标识符列表都是将字符串 token 化以后的列表。区别在于标识符列表使用,作为不同参数之间的分割符。每一个参数都是一个 token 化的列表。在宏中空白符只起到分割 token 的作用,空白符的多少对于预处理器是没有意义的。 宏的一些奇技淫巧: "https://g 阅读全文
posted @ 2019-12-17 09:33 yooooooo 阅读(3746) 评论(0) 推荐(4) 编辑
摘要:什么是哈希表? 哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构 。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。 记录的存储位置=f(关键字) 这里的对应关系f称 阅读全文
posted @ 2019-03-14 15:34 yooooooo 阅读(1250) 评论(0) 推荐(0) 编辑
摘要:在linux 没有实现epoll事件驱动机制之前,我们一般选择用select或者poll等IO多路复用的方法来实现并发服务程序。在大数据、高并发、集群等一些名词唱得火热之年代,select和poll的用武之地越来越有限,风头已经被epoll占尽。 select()和poll() IO多路复用模型 s 阅读全文
posted @ 2018-07-17 11:53 yooooooo 阅读(711) 评论(0) 推荐(0) 编辑
摘要:弱符号是什么? 弱符号: 若两个或两个以上全局符号(函数或变量名)名字一样,而其中之一声明为weak symbol(弱符号),则这些全局符号不会引发重定义错误。链接器会忽略弱符号,去使用普通的全局符号来解析所有对这些符号的引用,但当普通的全局符号不可用时,链接器会使用弱符号。当有函数或变量名可能被用 阅读全文
posted @ 2018-06-28 10:20 yooooooo 阅读(9036) 评论(3) 推荐(5) 编辑
摘要:http://blog.csdn.net/yang_yulei/article/details/46337405 在各种数据结构(线性表、树等)中,记录在结构中的相对位置是随机的。因此在机构中查找记录的时需要进行一系列和关键字的比较。这一类的查找方法建立在“比较”的基础上。查找的效率依赖于查找过程中 阅读全文
posted @ 2018-02-26 14:25 yooooooo 阅读(1133) 评论(0) 推荐(0) 编辑
摘要:我们都知道,C++才是面向对象的语言,但是C语言是否能使用面向对象的功能? (1)继承性 在设计C语言继承性的时候,我们需要做的就是把基础数据放在继承的结构的首位置即可。这样,不管是数据的访问、数据的强转、数据的访问都不会有什么问题。 (2)封装性 class的类成员默认情况下都是private,而 阅读全文
posted @ 2018-02-14 11:31 yooooooo 阅读(2106) 评论(4) 推荐(1) 编辑
摘要:http://blog.csdn.net/sun_tttt/article/details/65445754 红黑树是一个平衡的二叉树,但不是一个完美的平衡二叉树。虽然我们希望一个所有查找都能在~lgN次比较内结束,但是这样在动态插入中保持树的完美平衡代价太高,所以,我们稍微放松逛一下限制,希望找到 阅读全文
posted @ 2018-02-07 16:58 yooooooo 阅读(574) 评论(0) 推荐(0) 编辑
摘要:https://www.cnblogs.com/ggzss/archive/2011/08/18/2145017.html assert是一个宏定义,其作用是如果它的条件返回错误,则终止程序执行,原型定义: assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向 阅读全文
posted @ 2017-12-14 20:53 yooooooo 阅读(353) 评论(0) 推荐(1) 编辑
摘要:Container_of在Linux内核中是一个常用的宏,用于从包含在某个结构中的指针获得结构本身的指针,通俗地讲就是通过结构体变量中某个成员的首地址进而获得整个结构体变量的首地址。 实现方式: container_of(ptr, type, member) ; 其实它的语法很简单,只是一些指针的灵 阅读全文
posted @ 2017-12-03 14:30 yooooooo 阅读(3392) 评论(0) 推荐(1) 编辑
摘要:http://blog.chinaunix.net/uid-28458801-id-4200573.html 一、typeof详解: 前言: typeof关键字是C语言中的一个新扩展,这个特性在linux内核中应用非常广泛。(其实这和C++的auto关键字和可以推断decltype关键字相当类似) 阅读全文
posted @ 2017-11-18 21:11 yooooooo 阅读(1132) 评论(0) 推荐(0) 编辑
摘要:1:数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小或者成员的子成员大小(只要该成员有子成员,比如说是数组,结构体等)的整数倍开始(比如int在32位机为4字节,则要从4的整数倍地址开始存 阅读全文
posted @ 2017-10-23 11:21 yooooooo 阅读(3563) 评论(0) 推荐(1) 编辑
摘要:1、线程的概念: 线程是程序最基本的运行单位,而进程不能运行,所以能运行的,是进程中的线程。 2、线程是如何创建起来的: 进程仅仅是一个容器,包含了线程运行中所需要的数据结构等信息。一个进程创建时,操作系统会创建一个线程,这就是主线程,而其他的从线程,却要主线程的代码来创建,也就是由程序员来创建。 阅读全文
posted @ 2017-09-19 23:35 yooooooo 阅读(9086) 评论(0) 推荐(4) 编辑
摘要:函数如何实现不定参数:由于在C语言中没有函数重载,解决不定数目函数参数问题变得比较麻烦,即使采用C++,如果参数个数不能确定,也很难采用函数重载。对这种情况,提出了指针参数来解决问题。 (1)va_list 定义了一个指针arg_ptr, 用于指示可选的参数. (2)va_start(arg_ptr 阅读全文
posted @ 2017-04-11 20:09 yooooooo 阅读(16328) 评论(5) 推荐(2) 编辑
摘要:预处理有很多,以下选取我实际用过和见过的: #ifdef 电脑程序语句,我们可以用它区隔一些与特定头文件、程序库和其他文件版本有关的代码。 运行结果: 改写代码如下: 运行结果: #if的使用说明 #if的后面接的是表达式 它的作用是:如果(MAX==10)||(MAX==20)成立,那么编译器就会 阅读全文
posted @ 2017-03-12 21:14 yooooooo 阅读(703) 评论(0) 推荐(2) 编辑

点击右上角即可分享
微信分享提示