- 博客(1373)
- 资源 (32)
- 收藏
- 关注

原创 git使用
在该目录中运行 git init,这样会创建一个新的 .git 子目录,这个子目录含有你初始化的 Git 仓库的所有必要的骨架文件,但项目本身还没有任何文件跟踪。一个裸仓库没有工作目录, 这意味着它不包含项目的文件, 只包含版本控制系统的数据。这是作为远程仓库的理想选择, 因为它避免了对文件内容的直接操作可能引起的混乱和问题。至此,就成功地在本地创建了一个新的Git仓库,并进行了首次提交。这里的`origin`是远程仓库的默认名字, /path/to/myrepo.git是在第一步中创建的裸仓库的路径。
2021-03-10 09:26:39
889
9

原创 【linux】vim和vi使用
要选中内容进行剪切,先在命令模式下按 v 进入 Visual Mode,然后用 方向键 或 hjkl 选择文本,再按 d 进行剪切。要选中内容进行复制,先在命令模式下按 v 进入 Visual Mode,然后用方向键 或 hjkl 选择文本,再按 y 进行复制。与indent有关的配置,会自动缩进,从window复制代码时候,会造成多行乱缩进,去掉含有indent字符串的配置。"Ny (双引号 + 粘贴板号 + y):复制到粘贴板N ,N 为粘贴板号。:set+空格+tab,可以看到有哪些set命令可用。
2021-02-22 11:15:49
998
5

原创 vscode的使用
1. VSCode列选择2. 跳转3. 中文显示4.编码设置5.tab设置6.更改一个文件的编码7.在项目中打开文件6.
2020-12-15 14:12:09
2650
2

原创 linux常用命令
目录1. 查找当前目录底下的文件夹的子目录中的某个文件2. 查看当前用户3. 查看所有用户组4. 添加用户到已存在的组5. 实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器6. 查看所有服务端口7. 查看文件二进制:8. 新建并写字符串123到文件1.txt,文件最后有换行符。9. 显示文件内容10. 显示目录总占用空间11. 查看磁盘使用情况12. CentOS关闭防火墙13. 在shell中使用find结合grep进行文件字符串的替换14. locate命令15. cd命令16.
2018-01-18 10:18:20
6663
4
原创 深入解析 InfiniBand 网络数据包调试:从协议头到负载的完整转储指南
本文详细探讨了在InfiniBand网络技术中,如何通过内核调试函数print_hex_dump和hex_dump_to_buffer逐层解析和打印数据包内容,实现从协议头到负载的完整调试。文章首先介绍了InfiniBand网络数据包的多层协议结构,包括硬件地址标识、IPoIB头部、IP头部及负载数据。接着,通过分析内核调试函数的实现逻辑,结合IPoIB驱动实例,详细讲解了如何逐层解析和打印数据包内容。文章还提供了调试技巧与注意事项,帮助开发者高效排查网络问题。最后,文章总结了通过print_hex_dum
2025-05-20 00:30:00
132
原创 Linux 内核等待机制详解:prepare_to_wait_exclusive 与 TASK_INTERRUPTIBLE
prepare_to_wait_exclusive 是Linux内核中用于将进程以独占方式加入等待队列的关键函数。其主要功能包括标记独占等待、安全入队和设置进程状态。通过设置 WQ_FLAG_EXCLUSIVE 标志,该函数确保在唤醒时仅唤醒第一个独占等待者,避免“惊群效应”。函数在自旋锁保护下将条目添加到等待队列尾部,并在锁保护下设置进程状态(如 TASK_INTERRUPTIBLE),以确保并发安全。prepare_to_wait_exclusive 常用于写入者优先模型和避免资源竞争的场景。使用时需遵
2025-05-20 00:15:00
113
原创 Linux 资源管理的基石:从内存控制组(memcg)到 cgroup 的核心机制
本文深入探讨了Linux内核中的资源管理机制,特别是控制组(cgroup)和内存控制组(memcg)的设计与实现。文章首先通过一个典型的多服务服务器场景,展示了资源隔离的重要性,并详细解析了Linux如何通过cgroup和memcg实现资源划分和细粒度控制。接着,文章重点分析了内存控制组中的关键函数mem_cgroup_charge_skmem,解释了其在Socket内存管理中的作用及其在不同cgroup版本中的实现逻辑。此外,文章还探讨了cgroup在非容器环境中的应用,如多用户服务器和关键服务保护,强调
2025-05-19 00:30:00
121
原创 Linux 驱动开发中的内存管理:从 mem_cgroup_sk_alloc 到替代方案
在Linux内核开发中,内存管理是核心任务之一,特别是对于驱动开发者来说,理解内存控制组(memcg)和动态内存分配机制至关重要。本文从mem_cgroup_sk_alloc函数的功能解析入手,探讨其在驱动开发中的局限性,并提供适用于驱动场景的替代方案与最佳实践。 mem_cgroup_sk_alloc函数主要用于将socket的内存使用关联到内存控制组,适用于网络协议栈中的内存统计和限制。然而,在驱动开发中,该函数并不适用,原因包括上下文不匹配、功能定位差异以及潜在稳定性风险。驱动开发者应使用标准内核内存
2025-05-19 00:15:00
89
原创 Linux内核中tcp_v4_connect函数深度解析
tcp_v4_connect 是 Linux 内核中负责处理 IPv4 客户端 TCP 连接建立的核心函数。其主要任务包括参数验证、路由选择、端口分配、状态管理、安全机制初始化以及 SYN 报文的构造与发送。具体流程如下: 参数验证:检查地址长度和协议族合法性,确保传入的地址结构体符合 IPv4 格式。 路由选择:通过目标地址查找最佳路由,拒绝多播或广播地址的 TCP 连接。 端口绑定:动态分配或绑定本地端口,处理端口冲突。 状态管理:将套接字状态置为 TCP_SYN_SENT,表示已发送 SYN 报文,等
2025-05-18 00:30:00
87
1
原创 Linux 内核中 TCP 连接实现的深度解析
本文深入分析了Linux内核中TCP连接建立和管理的核心逻辑,重点探讨了inet_stream_connect和__inet_stream_connect函数及其依赖的inet_wait_for_connect等待机制。文章详细解析了TCP连接的状态机管理、并发控制、锁机制以及高级功能如BPF钩子和TCP FastOpen的实现细节。通过分层设计和模块化扩展,Linux内核在保证高性能的同时,提供了极高的灵活性。开发者可以根据需求裁剪非核心功能,但需谨慎处理并发控制和资源管理。本文为理解操作系统如何处理网络
2025-05-18 00:15:00
146
原创 基于C语言的歌曲调性检测技术解析
在音乐分析与数字信号处理领域,自动检测歌曲调性是一项基础且关键的任务。本文以C语言为核心,结合音频处理库()和快速傅里叶变换库(),探讨如何实现调性检测,并通过实际案例《忘尘谷》分析程序结果与简谱标记的差异。支持格式:通过库读取WAV等无损格式音频文件。代码示例:#include <sndfile.h>SNDFILE *file;SF_INFO info;file = sf_open("input.wav", SFM_READ, &info);float *
2025-05-17 08:19:46
20
原创 Linux 内核中 Socket 监听机制解析与简化实现
本文深入解析了Linux内核中ib_listen函数的实现逻辑,探讨了如何简化实现一个类似TCP的自定义传输协议,特别是在移除BPF依赖时的可行性与注意事项。ib_listen函数的核心步骤包括参数与状态校验、监听状态初始化以及设置Backlog。BPF在内核中主要用于网络监控、安全策略和性能优化,但其回调功能tcp_call_bpf并非核心逻辑,移除后不影响基础监听功能,但会失去扩展性。在简化实现时,可以聚焦核心状态机与队列管理,剔除TFO、BPF等高级特性以降低复杂度。通过本文的分析,读者可以深入理解L
2025-05-17 00:30:00
106
原创 Linux 内核中 inet_accept 的实现与自定义传输协议优化
本文深入分析了Linux内核中inet_accept函数的实现逻辑,探讨了其在TCP协议中接受新连接的关键作用。该函数通过调用传输层协议的accept方法,处理新连接的绑定、状态校验及多核优化等步骤,尤其是通过RPS(Receive Packet Steering)技术实现多核负载均衡,提升网络性能。文章进一步讨论了在自定义传输协议开发中,是否保留RPS的权衡问题,指出在高并发场景下,RPS对性能优化至关重要,但在低负载或原型设计中可简化以提升开发效率。最终,开发者需根据业务需求在性能与复杂度间找到平衡,并
2025-05-17 00:15:00
291
原创 深入解析 Linux 内核中的 IPv4 套接字绑定机制:__inet_bind 函数与 inet_can_nonlocal_bind 的取舍
本文深入解析了Linux内核中IPv4套接字绑定的核心函数__inet_bind的实现逻辑。该函数负责将用户指定的地址(IP+端口)绑定到套接字,确保网络通信的基础。文章详细介绍了__inet_bind的各个步骤,包括地址族检查、地址类型验证、非本地绑定权限检查、特权端口检查、套接字状态检查、地址与端口绑定、端口分配、BPF钩子与状态更新等。此外,文章还探讨了inet_can_nonlocal_bind函数的作用及其在自定义传输协议中的取舍,建议在简化实现时权衡功能需求与安全性。通过理解__inet_bin
2025-05-16 00:30:00
77
原创 《内核探秘:一段关于套接字绑定的师徒对话》
在实验室中,学生小柯在研究Linux内核的ib_bind函数时遇到疑问,向导师李教授请教。李教授详细解释了代码的各个部分:首先,函数检查是否使用协议自定义的bind方法,接着验证地址长度是否符合IPv4格式,然后执行与cgroup关联的BPF程序进行安全策略检查,最后调用__ib_bind完成实际绑定。李教授强调,虽然在某些特定场景下可以移除BPF调用以优化性能,但在多租户或容器化环境中保留BPF调用是必要的,以确保安全策略的执行和系统的可扩展性。通过这次讨论,小柯对Linux内核网络协议栈的设计和实现有了
2025-05-16 00:15:00
135
原创 Linux 内核中协议族与套接字类型的实现机制
本文深入解析了Linux内核中协议族与套接字类型的协同工作机制,重点探讨了协议族的注册、套接字类型的支持声明以及应用程序调用socket()函数的完整流程。协议族通过proto_register和sock_register向内核注册,声明其存在和能力,并通过create函数隐式声明支持的套接字类型。当应用程序调用socket()时,内核通过sock_create查找注册的协议族,调用其create函数,并根据套接字类型绑定对应的操作集和传输层协议。文章还详细介绍了SOCK_STREAM的实现细节,包括操作集
2025-05-15 00:30:00
83
原创 Linux 内核 IPv4 协议栈中的协议注册机制解析
inetsw 是 Linux 内核 IPv4 协议栈中的核心数据结构,用于管理不同套接字类型(如 SOCK_STREAM、SOCK_DGRAM)的协议实现。它是一个静态全局链表数组,大小为 SOCK_MAX,每个链表节点为 struct inet_protosw,包含协议类型、协议号、标志位及协议操作函数集等关键字段。通过 inet_register_protosw 函数,协议可以动态注册到 inetsw 链表中,确保永久协议(如 TCP、UDP)不受覆盖,同时支持非永久协议的动态加载和卸载。该机制通过自旋
2025-05-15 00:15:00
190
原创 Linux 内核中 list_for_each_entry_rcu 的解析与应用
本文深入解析了Linux内核中list_for_each_entry_rcu宏的设计与实现,该宏用于在RCU(Read-Copy-Update)保护下进行链表遍历,适用于多线程环境中读多写少的场景。文章首先介绍了该宏的定义位置及其历史背景,指出其核心定义位于include/linux/rculist.h文件中,与普通链表宏分离,以优化代码结构。接着,详细解析了list_for_each_entry_rcu的实现,包括其关键组件list_entry_rcu和READ_ONCE的作用,以及RCU机制的核心保护机
2025-05-14 00:30:00
27
原创 Linux 内核网络协议栈:从 Socket 类型到协议注册的深度解析
本文深入探讨了Linux内核网络协议栈的设计与实现,重点分析了核心数据结构(如inetsw数组和sock_type枚举)以及关键函数(如inet_add_protocol)的工作原理。文章首先介绍了sock_type枚举,定义了Linux支持的Socket类型(如SOCK_STREAM、SOCK_DGRAM等),并解释了这些类型如何与协议绑定。接着,文章详细解析了inetsw数组的作用,该数组管理传输层协议与Socket类型的关联,并通过inet_protosw结构体描述协议条目。文章还探讨了inet_ad
2025-05-14 00:15:00
79
原创 深入解析 Linux C 语言中 Socket 返回值的正确处理
在 Linux 系统编程中, 函数是网络通信的核心工具之一。然而,许多开发者在处理其返回值时存在误区,尤其是对文件描述符(File Descriptor, fd)的合法性判断。本文将从文件描述符的分配机制出发,结合 的返回值特性,剖析常见的错误模式,并给出最佳实践。在 Linux 系统中,文件描述符是进程访问资源(如文件、管道、套接字等)的抽象句柄。其分配遵循以下规则:最小可用原则:内核总是分配当前未被占用的最小非负整数。默认占用:程序启动时默认打开三个文件描述符::标准输入():标准输出():标准错误(
2025-05-13 00:30:00
19
原创 量子计算:从理论突破到百万比特的远征
从实验室的53比特到工程化的百万比特,量子计算正在跨越从“原理验证”到“实用工具”的鸿沟。这条征途上,没有单一的技术赢家,超导、离子阱、硅基量子点等路线将在不同场景中互补共存。正如经典计算机从ENIAC到智能手机的演进,量子计算的真正革命或许不在算力数字的跃升,而在于打开人类认知的新维度——那里有高温超导材料的奥秘,有蛋白质折叠的密码,更有跨越时空的量子纠缠之美。在这场远征中,每个量子比特的跃迁,都在书写人类计算文明的新篇章。
2025-05-13 00:15:00
677
原创 歌曲《忘尘谷》基于C语言的歌曲调性检测技术解析
通过C语言结合信号处理库,可实现歌曲调性的自动化检测,但需兼顾技术细节与音乐理论。:统计音高分布,匹配大调或小调音阶特征(如D大调音阶:D-E-F♯-G-A-B-C♯)。),探讨如何实现调性检测,并通过实际案例《忘尘谷》分析程序结果与简谱标记的差异。:D大调与B小调共享调号(两个升号),程序可能捕捉到B小调的主音。:引入和弦分析或机器学习模型(如CNN)提升复杂音乐的检测精度。:基频检测易受和弦或伴奏干扰,需结合音阶分布优化逻辑。:程序检测《忘尘谷》主音为B,而简谱标记为1=D。:未安装FFTW开发库。
2025-05-12 13:12:18
1918
4
原创 基于C语言的TCP通信测试程序开发指南
创建套接字(Socket)绑定地址和端口(Bind)开始监听(Listen)接受连接(Accept)数据交互(Send/Recv)关闭连接(Close)创建套接字(Socket)连接服务器(Connect)数据交互(Send/Recv)关闭连接(Close)
2025-05-12 00:15:00
940
原创 Linux 内核网络初始化的关键:init_inet_pernet_ops 函数解析与现实必要性
必须保留:此代码是IPv4协议族支持多网络命名空间的基础,缺少它将导致网络功能严重受限(尤其在容器化环境中)。仅在极端定制场景可考虑移除:例如完全禁用IPv4且不需要网络命名空间支持的内核,但这在现实中几乎不存在。Q1: 如果不用网络命名空间,是否可以移除这段代码?答案:依然不能移除。原因解析:默认命名空间的依赖即使不主动创建新的网络命名空间,Linux 内核始终存在一个默认的初始网络命名空间init_net),所有单机网络操作(包括你的两台机器之间的TCP传输)都依赖于此默认命名空间。
2025-05-11 00:30:00
19
1
原创 科学唱准音阶的终极指南:从理论到实践的全方位训练法
唱准音阶需要长期系统训练,核心在于听觉敏锐度、发声控制力、节奏稳定性三者的结合。初期可通过工具辅助和分阶练习打好基础,后期逐步融入音乐表达。若遇到瓶颈,建议结合专业声乐课程(如施耐德发声法)进行系统性提升。将音阶唱准是声乐和音乐学习的基本功,需要通过科学的训练和持续的练习来提升。1. 培养听觉敏感度(关键基础)听音训练:多听标准音(如钢琴、调音器发出的A4=440Hz),记住每个音的音高和音程关系。模唱练习:先用乐器弹一个音(如中央C),然后模仿唱出相同的音高,逐渐扩展到音阶、音程。辨音游戏。
2025-05-11 00:15:00
551
1
原创 基于C语言的TCP通信测试程序开发指南
TCP通信采用客户端-服务器模型,核心流程如下:服务器端:创建套接字(Socket)绑定地址和端口(Bind)开始监听(Listen)接受连接(Accept)数据交互(Send/Recv)关闭连接(Close)客户端:创建套接字(Socket)连接服务器(Connect)数据交互(Send/Recv)关闭连接(Close)
2025-05-10 20:06:42
740
1
原创 量子计算:从理论突破到百万比特的远征
从实验室的53比特到工程化的百万比特,量子计算正在跨越从“原理验证”到“实用工具”的鸿沟。这条征途上,没有单一的技术赢家,超导、离子阱、硅基量子点等路线将在不同场景中互补共存。正如经典计算机从ENIAC到智能手机的演进,量子计算的真正革命或许不在算力数字的跃升,而在于打开人类认知的新维度——那里有高温超导材料的奥秘,有蛋白质折叠的密码,更有跨越时空的量子纠缠之美。在这场远征中,每个量子比特的跃迁,都在书写人类计算文明的新篇章。
2025-05-10 19:47:23
822
原创 Linux 内核中协议族与套接字类型的实现机制
协议族通过create函数隐式声明支持的套接字类型在create函数中处理sock->type并绑定对应的proto_ops。套接字创建是分层的协作过程协议族层(绑定操作集)→ 传输层(初始化协议)→ VFS 层(绑定文件描述符)。可靠性依赖全局资源与正确性即使create返回 0,仍需系统资源(如 fd)和协议实现的正确性支持。通过理解这一流程,开发者可以更高效地实现自定义协议族或调试内核网络问题。对于标准协议(如 TCP/IP),内核已确保其完整性与高性能,但对定制协议(如内核模块)需严格验证。
2025-05-10 19:39:34
604
原创 二进制与十六进制数据转换:原理、实现与应用
本文深入解析了Linux内核中lib/hexdump.c模块的三个关键函数:bin2hex、hex2bin和hex_to_bin,它们在二进制与十六进制相互转换中扮演重要角色。bin2hex函数将二进制数据转换为十六进制ASCII字符串,适用于日志输出和密钥显示等场景。hex2bin函数则反之,将十六进制字符串还原为二进制数据,常用于协议解析和密钥加载。hex_to_bin函数作为核心,负责单个字符的十六进制解析,其无分支设计有效防止了侧信道攻击。
2025-05-10 19:32:25
918
原创 使用 librosa 测量《忘尘谷》节拍速度
在音乐分析与处理领域,准确测量音频的节拍速度(BPM)至关重要。librosa 是一个强大的 Python 音频分析库,本文将通过多个函数示例展示如何使用 librosa 测量刘珂矣演唱的《忘尘谷》的节拍速度,并分析不同方法的效果。
2025-05-10 19:14:00
1418
原创 D大调:音乐中的辉煌之声
D大调如同音乐世界中的金色桥梁,连接着严谨的乐理规则与鲜活的情感表达。无论是古典巨匠笔下的恢弘乐章,还是流行歌手吟唱的动人旋律,D大调始终以其独特的音色魅力,在时间的长河中持续回响。理解并掌握这一调式,将为音乐创作与鉴赏打开新的维度。D大调是以D音为主音的大调,其音阶结构遵循“全音-全音-半音-全音-全音-全音-半音”的大调模式。音阶构成。音阶遵循大调音程排列规则“全音-全音-半音-全音-全音-全音-半音”(W-W-H-W-W-W-H)。
2025-05-10 00:30:00
1127
1
原创 Linux 内核中的 security_sk_free:安全模块与 Socket 释放机制解析
核心结论是 Linux 内核释放 socket 时的标准流程之一,与通信方式无关。只要涉及 socket 的释放,无论是本地还是网络通信,此函数均会被调用。对开发者的启示安全模块开发者:需通过钩子确保资源无泄漏。内核维护者:理解此函数是安全框架与核心代码解耦的典型案例。性能调优者:若无需安全模块,可编译时禁用以消除冗余调用。扩展思考Linux 安全框架通过类似的钩子(如)实现了对全生命周期事件的监控。这种设计在保证灵活性的同时,也带来了微小的性能权衡,体现了内核在安全与效率之间的平衡艺术。
2025-05-10 00:15:00
273
原创 Linux内核中的XFRM框架解析:IPsec与普通TCP传输的关系
XFRM(Transform)是Linux内核中实现IPsec(Internet Protocol Security)协议的核心框架,负责管理IPsec的安全关联(Security Association, SA)和安全策略(Security Policy, SP),处理IPsec报文的加密、解密、身份验证及策略匹配等操作268。普通TCP/UDP通信(如HTTP、数据库连接)、未加密的VPN(如PPTP)、非IPsec加密(如TLS/SSL)。若启用了IPsec(如企业VPN),则XFRM是必经环节。
2025-05-09 00:30:00
134
原创 Linux 网络命名空间:从内核资源管理到容器网络隔离
网络命名空间是网络资源的隔离容器,不是网络接口。网络接口是命名空间内的具体设备,需通过虚拟设备(如 veth pair)实现跨命名空间通信。该技术广泛应用于容器(如 Docker)、虚拟化及网络测试场景,是实现现代云原生架构的基础之一。dec_ucount是 Linux 内核中用于减少用户资源计数的函数。资源计数管理dec_ucount属于内核的用户命名空间(user namespace)和用户计数(ucounts)机制的一部分。它通过。
2025-05-09 00:15:00
301
原创 音程与音级:解码音乐理论的基石
两次大二度:最终音为本音的纯四度(如C→E)。两次小二度:理论上回到等音,但实际中需谨慎使用。混合方向:结果取决于大小二度的组合顺序。建议结合具体音阶或和声语境分析,以确定最符合音乐逻辑的答案。
2025-05-08 00:30:00
1952
1
原创 Linux内核初始化机制全解析:从pure_initcall到late_initcall
功能:注册默认拥塞控制算法(如CUBIC),配置全局参数。设计逻辑依赖协议栈:必须等待网络子系统(优先级4)就绪。模块化兼容:支持拥塞控制算法动态加载(如tcp_bbr.ko代码片段// 注册CUBIC算法// 设为默认// 优先级7Linux内核的初始化机制通过优先级划分和ELF段管理,实现了复杂系统的高效启动。从的极简静态初始化,到的最终依赖整合,每个宏都在其特定场景下发挥着不可替代的作用。理解这些机制不仅有助于内核开发,更能为系统级调试和性能优化提供理论基础。
2025-05-08 00:15:00
152
原创 滑动窗口极值追踪:minmax_running_min 函数解析与技术启示
函数展现了一个看似简单却蕴含深意的工程哲学:通过巧妙的层级化设计,在时间复杂度与空间效率之间找到完美平衡。这种设计思想不仅适用于网络协议优化,更为各种需要实时极值追踪的场景提供了可复用的架构范本。在万物互联的时代,此类算法的价值将随着实时数据处理需求的增长而愈发凸显。*/*/这个函数用于维护一个滑动窗口内的三个最小值候选,并根据新测量值更新这些候选。核心目的:在时间窗口win内跟踪最小的三个测量值(s[0]为最小值,s[1]次小,s[2]第三小),并在新测量值到来时更新这些候选。触发重置的条件。
2025-05-07 00:30:00
238
【Python编程】实用脚本工具:实现文件操作、数据转换与日志记录自动化系统设计
2025-04-21
自定义Linux网络协议的开发与测试
2025-03-11
Python爬虫开发教程及资源汇总
2024-11-22
多种编程语言下算法实现资源汇总
2024-11-21
Python项目设计资源概述:框架、库、架构设计与管理
2024-11-20
JavaWeb技术及其相关资源解析与实践指南
2024-11-19
Spring Boot 开发资源汇总及应用指南
2024-11-18
华硕Z10PA-U8系列主板用户手册-硬件安装与设置指南
2024-11-17
学生备考所需的多元化课程考试资源概述
2024-11-17
嵌入式开发:从单片机到电子硬件设计的全面解析
2024-11-17
小程序开发全流程指南及资源推荐
2024-11-17
毕业设计项目开发管理与优化指导-文档、代码、设计资源的高效利用
2024-11-17
MySQL资源汇总-数据库管理和学习指南
2024-11-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人