Every Makefile should contain this line: SHELL = /bin/sh to avoid trouble on systems where the SHELL variable might be inherited from the environment. (This is never a problem with GNU make.) 二次展...
学习笔记-Expect
1 Expect 脚本语法 1.1 Expect 脚本初窥 一个简单的输入密码操作 #!/usr/bin/expect –f set timeout 100 set password "123456" spawn sudo rm -rf zzlogic expect "root123456" send "$password\n" interact 1.2 Expect 命令 1.2.1...
学习笔记-CMake
帮助文档 cmake官方新手tutorial: https://cmake.org/cmake/help/latest/guide/tutorial/index.html cmake 添加头文件目录,链接动态、静态库 官方文档 cmake 语法 技巧 cmake命令是不区分大小写的,但是变量区分。 判断编译器类型 cmake if ("${CMAKE_...
Effective C++之55条建议
本文为Effective C++一书的学习总结,对55条程序设计建议条款进行罗列、简记。 1 让自己习惯 C++ No.01 视C++为一个语言联邦 C++实则是由多个次语言(Sublanguage)组成的联邦而非单一语言,主要的次语言包括 C、Object-Oriented C++、Template C++、STL。 No.02 尽量以 const, enum, inl...
Linux内核poll/select机制简析
0 I/O多路复用机制 I/O多路复用 (I/O multiplexing),提供了同时监测若干个文件描述符是否可以执行IO操作的能力。select/poll/epoll函数都提供了这样的机制,能够同时监控多个描述符,当某个描述符就绪(读或写就绪),则立刻通知相应程序进行读或写操作。本文将从内核源码(v5.2.14)入手,尝试简述poll/select机制的实现原理。 1 poll/se...
Redis集群环境搭建实践
0 Redis集群简介 Redis集群(Redis Cluster)是Redis提供的分布式数据库方案,通过分片(sharding)来进行数据共享,并提供复制和故障转移功能。相比于主从复制、哨兵模式,Redis集群实现了较为完善的高可用方案,解决了存储能力受到单机限制,写操作无法负载均衡的问题。 本文是Redis集群学习的实践总结,将逐步搭建Redis集群环境,并完成集群伸缩的实践。 1...
Redis源码笔记-服务器日志和函数可变参数处理server.c
server.h / server.c Redis源码中定义了几个和日志相关的函数,用于将不同级别的信息打印到不同的位置(日志文件或标准输出,取决于配置文件的设置),这些函数包括: void serverLog(int level, const char *fmt, ...); void serverLogRaw(int level, const char *msg); void ser...
Linux MMC 驱动子系统简述(源码剖析)
1. Linux MMC 驱动子系统 块设备是Linux系统中的基础外设之一,而MMC/SD存储设备是一种典型的块设备。Linux内核设计了MMC子系统,用于管理MMC/SD设备。 MMC子系统的框架结构如下图所示,其中core layer根据MMC/SD设备协议标准实现了协议。card layer与Linux的块设备子系统对接,实现块设备驱动以及完成请求,具体协议经过core laye...
Linux等待队列(Wait Queue)
1. Linux等待队列概述 Linux内核的等待队列(Wait Queue)是重要的数据结构,与进程调度机制紧密相关联,可以用来同步对系统资源的访问、异步事件通知、跨进程通信等。 在Linux中,等待队列以循环链表为基础结构,包括两种数据结构:等待队列头(wait queue head)和等待队列元素(wait queue),整个等待队列由等待队列头进行管理。下文将用内核源码(基于Lin...
Linux设备驱动模型简述(源码剖析)
Linux设备驱动模型和sysfs文件系统 Linux内核在2.6版本中引入设备驱动模型,简化了驱动程序的编写。Linux设备驱动模型包含设备(device)、总线(bus)、类(class)和驱动(driver),它们之间相互关联。其中设备(device)和驱动(driver)通过总线(bus)绑定在一起。 Linux内核中,分别用bus_type、device_driver和devic...