06 2022 档案
摘要:API包装器模式 通常,需要编写基于另一组类的包装器接口,用一个新的、更简洁的API,来隐藏所有底层遗留代码;或者,已经编写了C++ API,但后来需要给特定客户提供纯C接口,但又不想改变原来的代码封装;或者,你的API用的了一个第三方依赖库,你想让客户直接使用此库,但不想将此库直接暴露给客户。 包
阅读全文
摘要:设备树简介 一个设备信息用树形结构表示如下: from http://www.100ask.org/ 如何用设备树进行描述呢? /{ // 表示root节点 cpu{ // cpu节点 name = val; // 属性名name,val是属性值。val形式:1)"string"(双引号括起来);2
阅读全文
摘要:这部分主要讲Linux字符设备驱动程序的结构,解释主要组成部分的编程方法。 字符设备 **字符设备:**指只能一个byte一个byte读写的设备,不能随机读写数据,要按先后顺序。字符设备是面向流的设备,常见字符设备有鼠标、键盘、串口、终端、LED灯。 **块设备:**指可以从设备的任意位置读取一定长
阅读全文
摘要:Linux内核模块简介 模块的基本概念 Linux内核非常庞大,包含很多组件。我们如何把需要的部分包含在内核中? 两种办法: 1)把所有需要的功能都编译进内核中。 会导致2个问题:生成的内核会非常大;为现有内核添加、删除功能,将不得不重新编译。 2)不包含所有功能,需要的时候,动态地加载代码到内核。
阅读全文
摘要:Pimpl惯用法 Pimpl术语,即“pointer to implementation”(指向实现的指针),由Jeff Summer最先引入。该技巧可以避免在头文件中暴露私有细节,是促进API接口和实现保持完全分离的重要机制。 Pimpl并不是严格意义上的设计模式,而是桥接模式的一种特例。 如下图
阅读全文
摘要:单例模式的惯用实现 一直以来,我在C++中是这样实现单例模式的 class Singleton { public: static Singleton& GetInstance() { static Singleton instance; return instance; } private: Sin
阅读全文
摘要:shared_ptr 不能访问一个空智能指针所接管对象的数据成员或函数成员 当不能确定一个智能指针释放已经释放接管的内存时,需要对其进行空指针判断。因为决不能访问一个空智能指针对象的成员(数据成员或函数成员),否则可能会造成程序崩溃。 如果程序异常退出码为139,则有可能是因为访问空智能指针成员。
阅读全文
摘要:找一个进程可用端口号 如果我们想尝试哪个端口号可用,然后监听该端口,该如何处理?比如FTP协议里面有这样一个需求,PASV模式下,Server需要监听本地数据端口,通常是找一个随机端口号进行监听。而且每收到一个客户PASV命令后,就需要提供一个不同的数据端口,这也就是说,不能两个连接同时使用同一个数
阅读全文
摘要:背景 进程主要分为两部分: 1)进程管理,见Linux进程管理。 2)进程调度,见Linux进程调度。 进程调度程序,也称调度程序,是内核的组成部分,负责选择下一个要运行的进程。 意义 只有合理的调度,系统资源才能最大限度地发挥作用,多进程才会有并发执行效果。 [ ] 调度策略 调度程序原则 最大限
阅读全文
摘要:背景 进程主要分为两部分: 1)进程管理,见Linux进程管理。 2)进程调度,见Linux进程调度。 这部分主要讲进程管理。 进程和文件是Unix OS的2个最基本抽象。一个进程就是处于执行期的程序。 进程包括:一段可执行程序代码(代码的text section),打开的文件、挂起的信号、内核内部
阅读全文
摘要:背景 Linux中断上半部,参见Linux中断和中断处理程序 。 Linux中断下半部,参见Linux中断下半部及推后执行的工作。 这部分讲中断下半部和推后执行的工作。 中断处理程序(中断上半部)的局限: 以异步方式执行,并且有可能打断其他重要代码(包括其他中断处理程序)的执行。因此,中断处理程序应
阅读全文
摘要:最近在做与Unix/Linux的简化路径(simplify path)或称清理路径(clean path)有关的工作,刚刚好碰到这类问题,记录一下。 题目 地址:LeetCode 71. 简化路径 题目描述 给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 '/'
阅读全文