![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
程序开发入门篇
文章平均质量分 65
适合大一刚学完编程语言的小白继续学习
又见南风
集百家之长,仔细分析Linux内核方方面面的知识。
展开
-
pthread_cond_t 究竟有什么花样?
pthread_cond_wait 函数一旦调用,则线程立即被阻塞,同时所拥有的互斥锁也被释放,线程一直停止在pthread_cond_wait 函数中,直到 pthread_cond_singal 函数通知对应的条件变量时接触阻塞,pthread_cond_wait 运行结束,但是返回的时会申请之前释放的互斥锁。pthread_cond_wait返回时,互斥量再次被锁住。wait 的写法多种多样,但是最常见的还是在 while 中,在 while 被唤醒的线程会因为不满足条件而再次被阻塞!原创 2023-07-10 17:50:31 · 107 阅读 · 1 评论 -
pthread_mutex_t 究竟有什么花样?
自己动手画了个图,一张图胜过1000行注释。原创 2023-07-04 20:17:14 · 91 阅读 · 0 评论 -
Linux内核双链表的用法
任何地址存放的数据是可以转换成任意类型的(存放什么类型的数据,就需要用什么类型的指针去读取),但是读写就另说了。得到的地址减去它在结构体中的偏移量,就得到了它所属的结构体的首地址。随后,取转换后的数据类型中指定的成员 MEMBER 的地址,好巧不巧,从 0 地址出发到 MEMBER 的步进长度就是 MEMBER 在结构体中的偏移量。那要看 const 在谁前面呀,在类型前面,类型不能变,在指针前面,指向的地址不能变,这里明显是在类型前面)删除结点:抓住某个结点,获取它的前后结点,再让其前后结点互相指向。原创 2023-06-22 11:40:54 · 93 阅读 · 1 评论 -
如何优雅地传递指针?
实例1的第一段代码之所以很多人没有看出问题,是因为把字符串当做了普通的字符变量,而忽略了它的一个本质,传递时是字符串的地址。change函数根本不起作用,很多新人会以为 p = “bbb” 是给字符指针变量赋值,实际上是给 p 的地址赋值,赋予了字符串 “bbb” 的地址。我的理解是对待指针参数是使用一个新的临时指针去指向参数,对待非指针变量只是新建一个值相同的变量来供内部使用。实例:写一个函数让输入指针指向一个另一个地址并对指向的内容进行处理。实例2:修改数字指针指向的内容。实例1:修改字符串内容。原创 2023-06-07 17:42:36 · 67 阅读 · 1 评论 -
如何优雅地使用常量?
其实很多实际的项目中,一旦是涉及大量命令的,所谓的命令基本上都是一些简单的数字。这是个很不好的习惯,建议像下面这个。还是上面那个项目,这里是在回调函数中设置网络设备的状态,本来只是两个简单的数字,0、1,但是为了方便理解和减少调试难度,一样也统一了常量的枚举。此外,设计程序时时常会一些即时用到的字符串常量,建议都使用 define 声明,这样在排错的时候,一些低级的书写错误将会很容易调试。这是我在项目中写的一个给接收的 mac 标记设备类型的函数,重点看 DeviceFlags 枚举的作用。原创 2023-05-30 18:25:17 · 129 阅读 · 1 评论 -
如何优雅地使用全局变量?
貌似看起来没什么问题,但是一旦项目持续扩大,需要加入的全局信息越来越多,而且针对某些程序需要修改的仅仅只是其中的一部分而已,为此暴露出了整一个信息块就非常不安全。这点可以参考 Linux 设备模型源码中的 kref 的实现,对设备的使用计数,同样是维护了一个全局变量,并且也是向外提供针对性的操作方法。当 static 声明函数时,该函数同样也不需要向外部声明,同时不可直接被外部调用,但是这里是为了向外部提供针对性操作全局变量的方法。没错,其实我还是很喜欢把C语言当成 C with class 来编程的。原创 2023-05-31 14:52:37 · 126 阅读 · 1 评论