- 博客(14)
- 收藏
- 关注
原创 Makefile中的一些知识点
在 Makefile 中,变量的赋值可以来源于多种地方。是 GNU Make 中的一个关键字,用来。然后bash执行make的时候传参的时候。通常情况下:Makefile中设置。Makefile 内部定义。命令行传入(优先级更高)那么 Make 会使用。
2025-06-05 15:28:56
188
原创 RFC862 EchoServer
Echo 协议是一种简单的网络协议,设计目的是让客户端向服务器发送数据,服务器将接收到的数据原封不动地返回(回显)给客户端。
2025-05-11 22:31:12
201
原创 ATCHANNEL.c介绍
的主要职责是:通过串口(如)与 modem 进行 AT 命令通信。维护一个读线程负责接收并处理 modem 返回的数据。提供线程安全的接口供上层发送命令并同步等待响应。解析返回结果,包括OKERROR/ 中间响应等。| ATChannel API | ← at_send_command() 等接口| 命令同步机制 + 线程锁 | ← pthread_mutex, condition。
2025-04-30 17:52:25
713
原创 Muduo Logger
往文件写日志的一个常见问题是,万一程序崩溃,那么最后若干条日志往往就丢失了,因为日志库不能每条消息都flush硬盘,更不能每条日志都open/close文件,这样性能开销太大。殊不知如果出现程序死循环拼命写日志的异常情况,那么往往是开头的几条日志最关键,它往往反映了引发异常(busy-loop)的原因(例如收到某条非法消息),后面都是无用的垃圾日志。4. 日志消息的格式是固定的不需要运行时配置,这样可节省每条日志解析格式字符串的开销,好处:使用固定格式的日志,使用脚本好提取,好处理,格式变了,就比较麻烦。
2025-03-09 01:23:13
944
原创 多缓冲技术
这种技术通常用于计算机显示图像,也常用来避免在读写设备不同的情况下使用双端口RAM(DPRAM)。在计算机科学中,多重缓冲是一种使用多个缓冲区来存储数据块的技术,目的是使“读取者”看到的。尽管可能是旧的)数据版本,而不是正在被“写入者”更新中的。
2025-03-08 23:43:32
187
原创 vector的emplace_back和push_back
2. 在a不存在的情况下,使用emplace_back最佳,push_back 的move次之,push_back的最差。“在已经存在对象的情况下,push_back 和 emplace_back其实都只有一次调用构造,不过构造函数不同。1. 在a已经存在的情况下,使用push_back的move最佳,其他emplace和push都差不多。对于拷贝构造和move构造, 拷贝可能涉及到深浅拷贝,move直接搞指针,所以快。push_back(std::move(a)):调用一次移动构造。
2025-02-28 15:32:28
195
原创 C++中的模板的一些约定熟成(不看后悔一辈子)
Predicate:强调条件判断,返回 bool,用于筛选或测试。Compare:强调顺序比较,返回 bool,用于排序或优先级。Operation:强调计算或变换,返回任意类型,用于处理数据。Function:最通用,表示任何可调用对象,不限类型或用途。命名惯例典型含义示例场景Predicate返回布尔值的条件检查Compare定义顺序的二元比较Operation执行变换或计算Function通用可调用对象Iterator迭代器类型T通用类型参数。
2025-02-28 01:12:11
933
原创 Linux的Pthreads mutex采用futex(2)实现
(Fast Userspace Mutex)是一种 Linux。,但具体的实现取决于 glibc 版本和互斥锁的类型。如果你有更具体的问题,可以继续问我!如果线程持锁时间较短(比如自旋锁。中有不同类型,影响是否使用。,Linux 还使用。
2025-02-10 23:21:23
527
原创 GCC 头文件的搜索顺序
目录作用来源系统级头文件系统软件包GCC 运行时库和内部文件GCC本地安装的软件头文件手动安装的软件手动指定的-I路径(如这样可以保证本地安装的库优先于系统库,但不会影响 GCC 自己的库。当您使用它gcc xxx.c来编译程序时,GCC会自动为您包含一些默认的-I(包含路径)和(库路径)-L1. GCC 默认的-I路径当你不手动指定-IGCC默认会搜索GCC 自己的头文件,比如stdarg.h手动安装的软件的头文件目标架构相关的系统头文件标准库头文件,比如stdio.h。
2025-02-01 23:48:06
527
原创 I/O multiplexing LT and ET
可惜的是,目前内核中使用同一种数据结构表示读和写事件,读写事件放在一个就绪列表中,在读出后才判断是读事件还是写事件。因此,我们无法实现在不同的场景使用不同的模式。值得注意的是,许多第三方网络库都使用的是LT模式,一般来说为了互相的兼容推荐使用LT模式。如果有事件到达,还没有进行处理,则它会一直通知,直到事件被处理。LT模式 更适用于read()事件,它不会造成接收的饥饿,ET模式可能会造成数据接收不完整的情况。,即使你没有处理这个事件,它也会持续触发。,否则可能会丢失连接。
2025-01-31 15:46:08
561
原创 c# getUppercase
需要注意的是,GetUpperBound 方法返回的是最大索引值,而不是数组的长度。在这个示例中,`array` 是一个 3x3 的二维数组,`maxIndex0` 和 `maxIndex1` 分别是第一维和第二维中最大元素的索引。在这个例子中,`array` 是一个 3 行 4 列的二维数组,`maxRowIndex` 的值为 2,因为行的索引范围是 0 到 2。在这个例子中,`array` 是一个 3 行 4 列的二维数组,`minRowIndex` 的值为 0,因为行的索引范围是 0 到 2。
2023-03-31 18:02:30
247
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人