- 博客(28)
- 收藏
- 关注
原创 GNU/Linux下初识epoll
eventpoll高效底层为红黑树使用回调机制而不是线性扫描,处理效率不会随着集合的变大而下降使用共享内存(内核与用户区之间),避免了频繁拷贝没有最大文件描述符限制将用户所关心的文件描述符上的事件放在内核的一个事件表中,同时epoll需要一个额外的文件描述符来唯一标识内核中的这个事件表线程安全,无需进行共享资源管理。......
2022-07-20 16:43:03
425
原创 【json-tutorial】第一章学习笔记
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。本系列博客是关于学习json-tutorial项目的一些感悟感觉学习此项目对于使用开发一个实际有用的东西很有帮助,而且作者的教导非常详细,代码也很规范,就决定学习一下此项目是一个从零开始的JSON库教程,难度适合于学习过的同学我的编码环境是 Mint OS,使用gcc编译代码这篇博客是关于json-tutorial第一章的内容的理解与思考内容主要偏向于对当时觉得难懂的地方的复盘笔记,而不是一切都很详细的笔记在初次打开教程的时候
2022-06-29 21:36:44
522
1
原创 GNU/Linux下粘包问题的简单处理
使用标准的封装要传输的不定长的数据包在每条数据的尾部添加特殊字符,遇到特殊字符则代表数据接收完毕在发送数据块之前在数据块最前面添加一个固定大小的,由+组成数据块可能包含多种格式内容,此时可以用来内容,我后面大概率会发一篇关于cJson的博客(挖坑)发送端需实现一个与一个的函数...
2022-06-23 22:40:20
249
原创 GNU/Linux下以C语言实现线程池
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。C语言实现线程池intro线程池的组成任务队列工作线程与管理者线程线程池结构体线程池头文件(.h)具体函数实现完整代码参考intro本文代码附带详细注释本文主要讲述线程池实现的细节,其余不详细描述为保证精简,代码无错误检查,附带错误检查的详细代码见文章末尾线程池的组成任务队列:存储需要处理的任务工作线程:处理任务 / n个管理者线程:管理工作线程 / 1个任务队列以结构体方式定义type.
2022-05-26 23:03:43
179
原创 使用信号量实现生产者消费者|C语言
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。Intro本文为多生产者多消费者的C语言实现生产者与消费者针对链表的头结点进行操作使用的现场同步方法为信号量本文侧重于理解条件变量的使用为保证代码简洁,本文代码没有对函数的返回值进行检查,聪明的你一定一定知道如何检查这个小细节(•̀ᴗ•́)و ̑̑关于互斥锁+条件变量的多生产者多消费者模型实现请参考我的这篇博客analysis多生产者多消费者有多个线程,当根据信号量定义的资源数不同,所对应的情况也有所不.
2022-05-09 19:35:12
2038
原创 生产者消费者|链表|C语言 实现
Intro本文为多生产者多消费者的C语言实现生产者与消费者针对链表的头结点进行操作使用到的线程同步方法为互斥锁+条件变量本文侧重于理解条件变量的使用为保证代码简洁,本文代码没有对函数的返回值进行检查,聪明的你一定知道如何检查这个小细节(•̀ᴗ•́)و ̑̑show me the code/*基于链表的多生产者多消费者问题*/#include <stdio.h>#include <stdlib.h>#include <unistd.h>#inc
2022-05-05 22:32:25
617
原创 dup()与dup2()的浅析
文章目录前言定义详解close then openopen - close - dup -closeopen - dup2 - close参考:前言关于dup()和dup2()的使用在Linux系统编程中是十分重要的一环,但关于dup2()的使用总有一种雾蒙蒙的感觉,本文会从dup()说起,希望可以带领大家走过迷雾文中代码片中代码仅供逻辑参考因本人水平有限,若文中有何纰漏,恳请各位斧正定义详解dup()的使用与open(),close()函数的联系十分密切思考一下,我们如何完
2022-04-18 21:06:15
634
1
原创 【温故知新】指针与const的小小奇妙反应
前言本文需要读者对指针有一定理解,关于指针部分,您可以参考:Pointers in 5 minutes.关于ANSI C标准int main(int argc, char** argv){ char *cp; const char *cpp; cpp = cp; cp = cpp;//产生编译警告}运行以上小小代码,会发现编译器会关于注释行报错初见此代码,我们会觉得cpp具有const修饰符,应该为read-only(我们都知道,const并不能将变量
2022-04-17 00:03:46
230
原创 Linux下实现一个简单的单向管道及其理解
简单管道实现目标与实现效果目标Pre效果具体逻辑再详细一点SHOW ME THE CODE分段描述父子进程运行顺序参考目标与实现效果目标实现一个简单的命令管道,以ls和sort命令为例,最终效果等同于ls | sortPre父子进程pipe()函数dup()函数exec系列函数我的配置:Linux Mint Cinnamon 5.0.7所有命令在zsh中运行效果ls | sort./fd ls sort具体逻辑首先使用pipe()函数建立一个单向管道p
2022-04-13 21:53:03
365
原创 Linux Shell中的简单命令组合使用
命令组合Linux中有着众多的命令,不同于直觉化的图形化窗口,我们并不能容易的理解Linux命令,但使用这些命令能让我们更接近系统底层调用的细节Linux命令较之于图形化窗口更加强大,而且在shell中我们可以组合使用Linux命令,发挥更强的作用本文将借助一份示例来介绍一些简单的Linux命令组合我的配置Linux版本:Linux Mintshell版本:zsh示例假设有文件1.txt记录着西邮Linux兴趣小组几位大佬们悲惨的成绩(图一乐)zzw 环境编程 33
2022-03-30 21:16:38
1876
原创 从pwd命令的实现理解ls -R的逻辑
从pwd命令的实现理解ls -R的逻辑引言pwd的逻辑pwd的代码实现ls -R逻辑参考:引言本文不再赘述ls命令与递归ls -R在man手册中的定义为:list subdirectories recursively即通过递归的手段列出所有子目录在我们为-R指定好目录后,其便会开始展示从当前目录开始,往下每一层的所有子目录,在代码实现中关于递归的部分是比较难以理解的一个点pwd在man手册中的定义为:print name of current/working directory
2022-03-29 19:55:00
631
1
原创 基于 GNU/Linux 操作系统的以 C语言 实现 ls命令 的部分功能
ls的实现目标准备书籍阅读实现目标实现 ls 的 -a、-l、-R、-t、-r、-i、-s 参数,并允许这些参数任意组合.-R 需要通对 / 的遍历测试界面美观(输出对齐、与颜色显示等)无资源与内存泄露准备书籍阅读<<Linux/Unix系统编程手册(上)>>– 2, 3略读– 4, 5.2-5.5, 15, 18 重点<<Unix_Linux编程实践教程>>–实现...
2022-03-16 21:04:52
1090
原创 非比较排序——计数排序
计数排序简介步骤图解code简介计数排序是一种稳定的线性时间排序算法当输入的元素是n个 0到k 之间的整数时,它的运行时间是O(n+k)计数排序处理小数据量很好用,也可以与其他排序结合使用计数排序对于数据范围很大的数组,需要大量时间和内存计数排序可以帮助入门者更好的理解栈与数组的巧用步骤将每个待排序元素存入数组a,使a在有效范围内每一个元素都对应着一个待排序元素遍历a数组每个元素,因为其有一一对应的值,所以cnt数组为计数器利用栈,将a数组中的元素变为升序输出图解例如排
2022-01-30 01:15:19
1409
原创 并查集及其路径压缩浅析
并查集(一种技巧)实用的树形数据结构主要处理不相交集合的查询与合并选出集合中的某个元素为代表,集合中具体包含哪些元素不重要将如下一系列操作复杂度降到常数级:对于给定的元素,可以很快找到该元素所在集合可以很快合并两个元素所在集合用树根当一系列数字的代表初始化函数的目的是使每个元素都是以自身为代表表示:不交集森林把每一个集合以一棵树表示,每一个节点即是一个元素。节点保存着到它的父节点的引用,树的根节点则保存一个空引用或者到自身的引用或者其他无效值,以表示自身为根节点。这个数据结构最
2022-01-05 01:06:42
1343
3
原创 【温故知新】2.字符串
是读 《c与指针》 的笔记依据个人理解水平而写,详略若不得当还请见谅string.h因为C中没有显示的字符串数据类型,所以字符串以字符串常量形式存储在字符数组中库函数strlen()的返回值为size_t类型:size_t是无符号整型,永远不会小于0size_t定义在stddef.h头文件中字符串函数:不受限制的字符串函数复制:strcpy()把后一个参数复制给前一个参数连接:strcat()把后一个连接到前一个的后面被连接字符串可以是空字符串连
2021-12-30 22:42:18
369
1
原创 【温故知新】1.数组
是读 《c与指针》 的笔记依据个人理解水平而写,详略若不得当还请见谅数组:在绝大多数的表达式中:数组名的值是指向数组第一个元素的指针例外:sizeof(数组名)返回的是整个数组所占字节而不是第一个指针所占字节&数组名 返回一个指向数组的指针,而不是指向数组第一个元素的指针的指针array [value] = *(array+(value));指针表示法效率可能大于下标表示法,下标表示法不可能效率高于指针表示法但下标表示法可维护性高下表引用实际上只是间接访问表达式的
2021-12-30 00:24:05
166
原创 西邮linux兴趣小组2019,2020补纳面试题
西邮linux兴趣小组2019,2020补纳面试题及2021最终面试题2019补纳关于纳新试题,您需要了解:本题仅作为面试有限参考为了代码的简洁,略去了大部分不影响理解的预处理指令题目难度与序号无关若无特殊声明,均假设在 Linux x86_64 GCC 编译器环境下关于本篇博客,您需要了解:我会假定您已经具备一定的c语言基础,所以部分解析内容会比较简略此外,由于补纳试题难度较高,我个人水平有限,若有错误与不足,欢迎您的指出!!2019补纳...
2021-12-13 22:44:09
1194
1
原创 西邮linux兴趣小组2019-2021三年纳新试题浅析
西邮linux兴趣小组2019-2021三年纳新试题浅析2019西邮 Linux 兴趣小组 2019 纳新试题1.2019西邮 Linux 兴趣小组 2019 纳新试题1.下面代码段将打印出多少个‘=’?运用相关知识解释该输出。int main(int argc, char *argv[]) {for (unsigned int i = 3; i >= 0; i--)putchar('=');}:将打出多少个 ‘=’ ???如果我们运行代码,就可以发现这还是一个死循环,for循
2021-12-08 23:30:07
1534
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人