唐墨123
万丈高楼平地起,辉煌还要靠自己
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
c++后端面试测试题解
测试:1 编程,实现每5秒检查进程SchLdr是否运行正常,不正常请启动SchLdr?#!/bin/bash# function detect_process() { PROCESS=$1 process_pid=`pidof $PROCESS` echo $process_pid if [ "x$process_pid" != "x" ];then return 0...原创 2020-02-13 00:30:47 · 1070 阅读 · 0 评论
-
关于linux kernel错误码为负数编码这件事情,我个人的一些看法
Linux内核采用负数作为错误码的设计背后蕴含深刻考量:一方面规避了社区因标准不统一导致的分裂风险(内核2.6时期论证),另一方面在7.0代码中展现出三重精妙性——通过与用户态正数错误码形成天然隔离层,既保证系统调用的清晰语义划分,又实现二进制兼容性维护,同时为错误处理提供类型安全的编译期检查。这种设计印证了内核代码高度理论化的特征,每处细节都经严谨论证,堪称工程实践的典范。(149字)原创 2026-06-12 15:27:07 · 46 阅读 · 0 评论 -
linux kernel (i2c、uart、spi、frame buffer、pci等)驱动框架的骨架
本文分析了Linux内核驱动框架的四大核心组件:1)设备树(OF)提供硬件描述,内核解析生成设备节点;2)sysfs基于kobject构建虚拟文件系统,展示设备层级;3)kobject/kset实现对象生命周期管理;4)uevent通过netlink实现热插拔通知。驱动启动流程为:内核启动→设备树构建→驱动注册→总线匹配→probe调用→设备创建→触发uevent→用户空间响应。这四大组件各司其职:OF描述硬件,kobject管理对象,sysfs提供视图,uevent实现通知,共同构成了Linux驱动框架的原创 2026-05-09 22:43:39 · 88 阅读 · 0 评论 -
linux kernel源码解析之:smp系统cpu热插拔
本文分析了SMP系统中CPU热插拔流程及per-cpu slab无锁缓存机制。通过流程图展示了CPU热插拔过程,并详细解析了slab缓存的构建与析构代码实现,包括slab元数据管理和object数组回收机制。重点阐述了无锁设计在per-cpu缓存中的运用,通过多幅代码截图展示了关键数据结构的操作流程。该机制有效提升了多核环境下的内存分配性能,同时保证了CPU动态调整时的缓存一致性。原创 2025-12-20 11:02:41 · 127 阅读 · 0 评论 -
linux字符设备驱动
摘要:该代码实现了一个Linux字符设备驱动memdev,包含设备初始化、读写操作等功能。通过register_chrdev_region或alloc_chrdev_region分配设备号,使用cdev_init和cdev_add注册字符设备,并创建4KB的内存缓冲区。实现了open/release/read/write/llseek等文件操作接口,支持用户空间与内核空间的数据拷贝。最后通过class_create创建设备类,为udev/mdev自动创建设备节点提供支持。原创 2025-11-28 13:43:07 · 105 阅读 · 0 评论 -
linux kernel之proc文件系统源码解析
本文对比了新旧Linux内核中proc文件系统的数据结构差异,通过图示直观展示了架构变化。同时解析了老版本内核proc文件系统的实现源码,揭示其内部工作机制。两幅配图分别呈现了数据结构对比和源码实现细节,为理解proc文件系统的演进提供了可视化参考。原创 2025-11-25 16:22:52 · 141 阅读 · 0 评论 -
如何解释c指针?
本文阐明了指针的本质是编译器/链接器的抽象概念,而非CPU直接使用的机制。通过C代码示例和伪汇编分析表明:指针本质上是指导编译器生成多级寻址代码的标记——每增加一个指针层级(),编译器就自动补充一次寻址操作。CPU执行时只处理地址和数据总线上的具体数值,通过逐步访问内存地址链(如0x1000→0x2000→0x3000)最终到达目标数据。无论是读写变量还是多级指针,CPU的底层操作流程完全一致,区别仅在于编译器根据指针层级生成的寻址次数不同(0级变量1次寻址,每多1个增加1次寻址)。这揭示了高级语言指针与机原创 2025-11-12 10:21:53 · 108 阅读 · 0 评论 -
linux module机制
Linux内核模块文件(ko文件)是动态扩展内核功能的二进制文件,采用ELF格式存储模块代码和数据。ko文件包含关键节区如.text(代码)、.data(变量)和.modinfo(元数据)。其生成过程经过预处理、编译、汇编和链接阶段,其中链接阶段处理内核符号引用和版本控制。加载ko文件时,系统会进行签名验证、内存分配、符号解析,最后执行初始化函数完成模块激活。这种机制实现了内核功能的动态扩展和"即插即用"特性。原创 2025-10-30 12:15:54 · 164 阅读 · 0 评论 -
linux 大文件直接IO带来的性能提升
摘要: 通过对比常规IO与直接IO(O_DIRECT)的性能测试发现,对于大文件连续读写,绕过page buffer的直接IO显著提升速度。测试显示,10MB文件直接IO速度达8123MB/s,远超常规IO的683MB/s;500MB文件直接IO速度达8245MB/s,而常规IO仅640MB/s。直接IO通过内存对齐分配和磁盘扇区(512B)直接访问,避免了page buffer的中间处理,尤其适合确定的大文件操作。代码使用posix_memalign确保内存对齐,并对比了不同规模文件的写入效率。原创 2025-10-23 15:21:06 · 120 阅读 · 0 评论 -
编译器自举过程……
原创 2025-07-08 19:45:01 · 234 阅读 · 0 评论 -
《一个电子工程师的12年》
redis、mysql、sqlite、kafka、zeromq、mongodb、http/https、rest api、mqtt、thread pool、go routine等等,陷入了复杂重复的循环中,中间,我见过形形色色的人,有的很傻,有的很自私,有的很狭隘,有的很极端,有的很要面子,有的很无耻,有的很卑鄙,有的人能当着你的面出尔反尔,这些人的所作所为有适合能惊掉你的下巴……2012年专科毕业,单片机没有学会,keil也不熟悉,protel 99se不熟悉,烙铁不熟悉,就突然毕业了。原创 2024-02-29 00:06:40 · 259 阅读 · 0 评论 -
从二极管到linux服务器
tcp(单片机信号控制)、udp(游戏)、mqtt(iot物联网传感器)、websocket(游戏、新媒体)、webrtc(用于流媒体、IM聊天软件)需要对寄存器、单片机内部总线、iic、spi、uart、can、modbus、fsmc(8080/8060)协议、sdio协议比较了解。2)模拟电路,LM358运算放大器、电压跟随器、PLL锁相环电路、加法电路、乘法电路、三角波、锯齿波、方波、sin波、恒流/压电路。对os任务切换时寄存器的功能有理解。低功耗蓝牙、wifi、zigbee、2.4G、433等。原创 2023-11-24 11:39:26 · 490 阅读 · 0 评论 -
键盘特殊符号
在代码中写流程图时,需要一些特殊符号,键盘不方便输入,这里用文档记录下来,以方便使用╮╭╯╰►▼▲例如以下代码的注释部分:// Component defines the lifecycle of managed components./// Created ――――――――――――――――――――――►(Stop)―――╮// ╰―(Init)―► Initialized ―――――――►(Stop)――╮│// ╰―(Ru原创 2022-05-11 15:32:36 · 983 阅读 · 0 评论 -
centos8.5 搭建k8s--1.23.1集群
1、kubernetes安装介绍1.1 K8S架构图在这里插入图片描述master节点用于管理整个k8s集群slave节点用于运行容器1.2 K8S搭建安装示意图3种网络类型:host机网络,master用于管理k8s集群pod网络,pod之间互相调用service网络,对外提供服务1.3 节点设置:1 节点资源:节点ip节点角色192.168.1.101k8s-master192.168.1.102k8s-node1192.168.1原创 2021-12-19 17:44:53 · 544 阅读 · 0 评论 -
如何从零开始搭建一个完整的K8S集群-------基于CentOS 8系统
k8s集群搭建:k8s有三个重要组件:使用kubeadm是k8s官方推荐的一个进群部署工具kubectl 是命令行客户端(相当于mysql)kubelet 是后台进程(相当于mysqld)软件环境:虚拟机: VMware® Workstation Pro 15操作系统:CentOS Linux release 8.1创建三个centos节点:10.0.0.180 k8s-master10.0.0.91 k8s-nnode110.0.0.136 k8s-nnode2查看c原创 2020-06-03 19:19:12 · 4274 阅读 · 4 评论 -
vimgrep 使用
在 Linux 中搜索文件最长用到的搜索工具是 Grep ,在使用 Vim 开发时第一时间想到是不是也可以在 Grep ,Google 后发现果然 Vim 内置有 Grep,下面我们一起看下 Grep 怎么使用lvimgrepquickfix-list vs location-listvimgrep:在 Vim 命令行模式下输入 :h vimgrep 可以看到 vimgrep 的使用文档命令::vim[grep][!] /{pattern}/[g][j] {file} ...:vim[.原创 2021-12-23 14:14:26 · 1164 阅读 · 0 评论 -
cpp源码-->打包-->容器实例
main.cc文件内容#include <iostream>#include <fstream>using namespace std;int main(int argc, char**argv) { cout << "a " << endl; std::string file_name= "/tmp/rnboxlog.txt"; std::fstream logfile(file_name.c_s原创 2021-12-04 18:34:56 · 549 阅读 · 0 评论 -
创建raid0矩阵的2个工具举例
zpool工具:格式化ssd为ext4文件系统:root@ipfs:~# mkfs.ext4 /dev/nvme3n1 root@ipfs:~# mkfs.ext4 /dev/nvme2n1 root@ipfs:~# mkfs.ext4 /dev/nvme1n1 root@ipfs:~# mkfs.ext4 /dev/nvme0n1 mke2fs 1.44.1 (24-Mar-2018)Found a sun partition table in /dev/nvme0n1Proceed an原创 2021-11-12 17:10:36 · 12319 阅读 · 0 评论 -
linux/windows 文件编码问题
linux下执行shell脚本时报错:-bash: ./a.sh: /bin/bash^M: bad interpreter: No such file or directory。原因是windows下的文件是dos格式,即每一行结尾以\r\n来标识,而linux下的文件是unix格式,行尾则以\n来标识。查看文件格式有三种方法:1.cat -A ,如果输出结果中行末尾是^M,则是dos格式,如果行末尾只是,则是dos格式,如果行末尾只是,则是dos格式,如果行末尾只是,则是unix格式。2.vim原创 2021-10-22 10:57:27 · 328 阅读 · 0 评论 -
virtualbox 扩展ubuntu虚拟机磁盘空间
第一步:第二步:第三步:第四步:安装磁盘管理工具:sudo apt install gparted -y原创 2021-10-22 00:32:43 · 9812 阅读 · 0 评论 -
清理ubuntu 磁盘
删除过期的历史版本缓存#!/bin/bash# Removes old revisions of snaps# CLOSE ALL SNAPS BEFORE RUNNING THISset -eusnap list --all | awk '/disabled/{print $1, $3}' | while read snapname revision; do snap remove "$snapname" --revision="$revision" done.原创 2021-10-18 21:37:57 · 307 阅读 · 0 评论 -
git 常用命令集合
分支创建:git branch jack_tool切换到新创建分支:git checkout jack_tool删除分支:#查看分支:root@ubuntu:~/go/src/github.com/lotus# git branch jack_tool master testing tmproot@ubuntu:~/go/src/github.com/lotus# g#删除远程分支:root@ubuntu:~/go/src/github.com/lotus# git原创 2021-04-28 18:04:14 · 366 阅读 · 0 评论 -
ubuntu磁盘空间清理
查看内核版本:root@jack-VirtualBox:~/# uname -aLinux jack-VirtualBox 5.11.0-37-generic #41~20.04.2-Ubuntu SMP Fri Sep 24 09:06:38 UTC 2021 x86_64 x86_64 x86_64 GNU/Linuxroot@jack-VirtualBox:~/#查看安装的内核:root@jack-VirtualBox:~/# dpkg --get-selections|grep linu原创 2021-10-15 10:29:45 · 860 阅读 · 0 评论 -
设置linux启动级别
linux系统启动级别的影响:大部分时间linux系统只需要运行在多用户模式下,没有了GUI后可以节省系统资源。查看默认级别:systemctl get-default设置linux启动级别:命令行设置运行级别的命令格式:systemctl <command> <unit.target>command 参数选项:get-default 查看默认运行的 target(重启后默认进入的运行级别)set-default 设置指定的 target 为默认的运行级别(.原创 2021-07-22 09:14:54 · 881 阅读 · 3 评论 -
c++ 实现旋转加载图标
//main.cc#include <stdio.h>#include <iostream>#include <string>#include <unistd.h>using namespace std;string spinChars = "|/-\\";typedef struct SSpinner { string message; int i;}Spinner_;SSpinner * NewSpi原创 2021-06-14 10:20:47 · 276 阅读 · 0 评论 -
查看linux开机启动项
linux 查看全部的系统服务:root@ubuntu:~/root/# systemctl list-unit-filessystemd-udevd-control.socket static systemd-udevd-kernel.socket static uuidd.socket enabled basic.target原创 2021-06-11 10:35:45 · 3512 阅读 · 1 评论 -
修复磁盘命令
windows 系统:打开dos终端,输入以下命令:chkdsksfc/scannowlinux系统:fsck -t ext4 -v /dev/sda1原创 2021-06-05 11:28:28 · 2490 阅读 · 0 评论 -
java 下载视频文件
import java.net.MalformedURLException;import java.net.URL;import java.net.URLConnection;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;public class HelloWorld { public s原创 2021-02-04 15:13:03 · 1525 阅读 · 5 评论 -
linux 测试网速
```shellroot@user:/tmp# wget https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py--2020-11-12 07:20:19-- https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.pyResolving raw.githubusercontent.com (raw.githubuser..原创 2020-11-12 15:40:15 · 515 阅读 · 0 评论 -
应用程序构建消息队列2
人到中年,是一个转折点,以后的路要思考清楚。见多了文人莫名奇怪的相轻。感谢某个业界大神鼓励说30岁是一个程序员的巅峰时刻。本文实现的消息队列,是用list.h实现的。适用于以下场景:线程之间异步性比较明显(执行需要时间,需要事件回调)的情况,消息类型比较多的情况。这篇文章的内容是博主为一个windows服务器写的消息队列,等下去书香门第上河坊散步,就之间粘贴了,不再修改为linu,如有需要可自行编辑一把(工作量倒不是很大,顺便加深理解,哈哈)。说来也奇怪,在2年前博主还大骂windows烂,骂gol原创 2020-07-28 21:47:03 · 422 阅读 · 4 评论 -
剪切Linux内核代码---为应用程序构建消息队列1
从linux 内核中,可以提炼出两个队列设计模型:1)一个是基于kfifo的队列,队列每个节点的数据块大小必须一致,适合做单一的消息投递任务。2)一个是基于list.h的队列,链表形式,适合做reactor模型下面的多线程消息交互任务。本文实现的是第一种方式,第二种方式在另外一篇文章里面(正在编辑)。写文档始终是一件麻烦的事情,写文档太耗时间了,不太想写文档。按照我们的传统,先上源码吧:// kfifo.h#ifndef __KFIFO_H#define __KFIFO_H#inclu原创 2020-07-25 20:20:22 · 364 阅读 · 0 评论 -
《linux内核源码分析----定时器》
来看一下linux kernel的定时器是如何设定的timer.h#ifndef _LINUX_TIMER_H#define _LINUX_TIMER_H/* * DON'T CHANGE THESE!! Most of them are hardcoded into some assembly language * as well as being defined here. *...原创 2020-03-22 22:42:02 · 630 阅读 · 0 评论 -
《linux内核源码分析----dma.c》
linux0.11、linux1.0、linux1.3、linux2.0、linux2.6分别是1万多行、16万行、32万行、70万行、480万行c代码。1.0带vfs和proc文件系统,内核的基本模型是没有多少变化。因此用于讲解kernel源码比较适合。kernel一级源码目录:[root@bogon linux-1.0]# lltotal 92drwxr-xr-x. 2 root...原创 2020-03-22 11:26:10 · 691 阅读 · 0 评论 -
redis 源码全解析
Redis 英文拼写: REmote DIctionary Server(Redis)Redis 是一个由Salvatore Sanfilippo写的高性能key-value存储系统。去除冗余信息,选择一个比较早期的源码进行分析,可以更清楚的看出一个源码的设计模型。从main()去分析,redis主要做了以下几件事情:redis原理:在内存层面用类型、key_len、ken、value...原创 2020-03-15 17:01:46 · 6239 阅读 · 0 评论 -
bitcoin
比特币地址算法:原创 2020-01-10 10:42:36 · 603 阅读 · 0 评论 -
C++模板全特化/偏特化
1. C++模板大家都对C++的模板编程应该都能很熟练使用了,下面就是一段很简单不过的例子了//模板函数template<typename T, class N> void func(T num1, N num2){ cout << "num1:" << num1 << ", num2:" << num2 <<...原创 2020-03-06 21:52:27 · 630 阅读 · 0 评论 -
Ipfs应用场景分析报告
ipfs 应用场景分析报告ipfs 核心组件merkle p2p种子算法kademlia网络拓扑算法p2p内网穿透技术lmdb/leveldb 数据库、git切片/融合技术fuse应用层文件系统,实现目录挂载。仅支持linux版本ipfs概述ipfs基于以及bt网络、迅雷、电驴为代表的p2p网络分发技术,结合git切片技术、加密技术、base58/Protobuf编码技术,使...原创 2019-09-11 18:15:55 · 1466 阅读 · 4 评论 -
boost::asio定时器
asioasio原本是一个独立的网络库,被boost选中后,改造为Boost库的一部分。设计原则为轻继承,重组合。符合c++的一贯风格。基类:boost::asio::io_service定时器类:boost::asio::basic_waitable_timer时钟类:std::chrono::steady_clock本文是kademlia算法的一部分,经过注释比较好理解。不准备详...原创 2019-09-09 18:42:20 · 846 阅读 · 0 评论 -
golang http文件服务器
通用的文件服务器可以用ftp、nginx等搭建。如果不想这么费事儿,可以用以下的代码简单实现一个文件服务器。此服务器是在下的一个存储项目中用到的,刚从github私有库拉取下来。使用golang编写按照我们的传统,直接上源码fileserver.go:package mainimport ( "fmt" "io" "io/ioutil" "net/http" "os" "os/...原创 2020-02-24 12:12:15 · 1018 阅读 · 0 评论 -
c++ aes加密
#include <stdio.h>#include <string.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <errno.h>#include <stdlib.h>#include <uni...原创 2020-02-18 19:52:21 · 722 阅读 · 0 评论
分享