自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(130)
  • 资源 (1)
  • 收藏
  • 关注

原创 【负载均衡oj项目】04. oj_server题目信息获取、界面渲染、负载均衡、后台交互功能

本文介绍了一个在线判题系统(oj_server)的目录框架和核心代码结构。系统包含三个主要模块:oj_model.hpp负责题目数据加载和管理,oj_view.hpp处理HTML界面渲染,oj_control.hpp实现主机控制、负载均衡等功能。系统通过questions文件夹存储题目内容,template_html文件夹存放网页模板,conf文件夹保存服务器配置。文章详细展示了oj_model.hpp的代码实现,包括题目结构体定义、数据加载和查询功能。该系统为在线编程评测提供了完整的后端支持。

2026-03-15 15:26:00 551

原创 【负载均衡oj项目】03. compile_server编译运行服务设计

本文介绍了一个在线编译执行系统的框架设计,主要包括编译器和执行器两大模块。编译器模块(compile.hpp)通过创建子进程调用g++进行代码编译,并将错误信息重定向到指定文件。执行器模块(runner.hpp)提供资源限制功能,通过rlimit设置进程的CPU和内存限制,并运行编译后的可执行程序。系统采用模块化设计,包含编译执行流程控制、错误处理和中间文件清理等功能模块,通过HTTP协议接收用户请求并调用相应处理流程。该框架实现了代码的安全编译和运行,满足在线评测系统的基本需求。

2026-03-15 14:14:12 436

原创 【负载均衡oj项目】02. comm公共文件夹设计 - 包含所有需要用到的自定义工具

本文介绍了日志打印和工具类设计实现。日志模块封装了INFO、DEBUG等不同等级的日志输出功能,包含时间戳、文件名和行号等信息。工具类包括:1) TimeUtil提供秒级和毫秒级时间戳获取;2) PathUtil处理文件路径拼接,生成源代码、可执行程序等各类文件的完整路径;3) FileUtil实现文件存在性检查、唯一文件名生成和文件读写操作;4) StringUtil提供基于分隔符的字符串分割功能。这些模块为系统提供了基础功能支持,包括日志记录、文件管理和字符串处理等。

2026-03-14 16:28:35 339

原创 【负载均衡oj项目】01. 项目概述及准备工作

本文介绍了一个基于C++开发的负载均衡式在线评测系统(OJ),采用MVC架构实现类似LeetCode的编程平台功能。系统通过多机负载均衡提升编译运行服务的并发能力,包含题目浏览、代码编辑、提交评测等核心功能。项目分为comm(公共模块)、compile_server(编译服务)和oj_server(主服务)三个模块,使用cpp-httplib、jsoncpp等开源库实现网络通信和数据序列化。文档详细说明了系统部署方法(需启动多个服务进程)、功能演示流程以及开发环境配置指南(包括GCC升级和依赖库安装)。

2026-03-13 15:03:48 949

原创 【MySQL】7. MySQL表数据的增删查改(CRUD)

本文介绍了MySQL表的增删改查(CRUD)操作,重点讲解了Create(创建/插入)功能。内容包括:基础插入语法、单行/多行数据插入(全列/指定列)、冲突处理(ON DUPLICATE KEY UPDATE和REPLACE)。通过学生表示例演示了各种插入方式,包括自动填充自增字段、处理主键/唯一键冲突等场景。特别说明了不同冲突处理方式的行为差异和返回值含义,为数据库操作提供了实用指导。

2026-03-03 09:13:03 723

原创 【MySQL】6. MySQL表的约束

本文介绍了MySQL中常用的表约束类型,包括空属性(NULL/NOT NULL)、默认值(DEFAULT)、列描述(COMMENT)和ZEROFILL等。这些约束通过技术手段确保数据的合法性和业务逻辑的正确性,最终目标是保证数据的完整性和可预期性。空属性要求字段不能为空值,默认值为字段设置默认填充值,列描述提供字段用途说明,而ZEROFILL则用于数字类型的格式化显示。通过具体案例演示了各类约束的创建和使用方法,强调了约束在实际开发中的重要性,帮助开发者设计更规范的数据库表结构。

2026-03-01 15:43:12 770

原创 【MySQL】5. MySQL数据类型

MySQL数据类型摘要 MySQL支持多种数据类型,主要包括数值类型、位类型和小数类型。数值类型分为有符号和无符号两种,默认有符号,使用UNSIGNED关键字可定义无符号类型。tinyint类型范围为-128~127,插入越界值会被拒绝。bit类型用于存储位字段,可指定位数(1-64),以十六进制显示。小数类型如float(m,d)可指定总位数m和小数位数d,MySQL会进行四舍五入校验。所有数据类型都具有约束作用,会强制校验数据合法性,确保数据完整性和一致性。

2026-03-01 09:33:16 987

原创 【MySQL】4. MySQL表的操作

本文介绍了MySQL数据库表的创建、查看、修改和删除操作。主要内容包括: 创建表的基本语法和不同存储引擎(MyISAM/InnoDB)生成的文件差异 查看表结构的两种方法:DESC命令和SHOW CREATE TABLE 修改表的常用操作:添加字段、修改字段属性、删除字段、修改表名和字段名 删除表的DROP TABLE语法 通过具体案例演示了各操作的执行效果和注意事项 文章详细说明了不同存储引擎下表的存储方式差异,并提供了修改表结构时的实用语法示例,适合数据库开发人员参考使用。

2026-02-24 13:49:08 1021 2

原创 【MySQL】3. MySQL库的操作

MySQL数据库操作指南:创建/删除数据库、字符集与校验规则设置。关键点包括:1)创建数据库时可指定字符集(如utf8)和校验规则(区分/不区分大小写);2)删除数据库语法;3)字符集影响语言支持,校验规则影响大小写敏感性和排序;4)通过SHOW CREATE DATABASE查看配置。示例演示了不同校验规则对查询和排序的影响,如utf8_general_ci不区分大小写,utf8_bin区分大小写。

2026-02-24 13:45:18 1482 1

原创 【MySQL】2. MySQL数据库基础

本文介绍了MySQL数据库的基本使用方法和架构原理。主要内容包括:1) MySQL登录与退出操作指令,包括参数说明和root用户切换;2) 对MySQL作为客户端-服务器模式网络服务的理解;3) 通过实例演示MySQL在Linux系统中的文件存储表现;4) 主流数据库产品的特点比较;5) 服务器、数据库和表之间的层级关系;6) MySQL的架构分层,包括连接层、服务层、存储引擎层和文件系统层。文章通过具体操作示例和架构图示,帮助读者理解MySQL的基本操作和核心工作原理。

2026-02-22 16:24:44 757

原创 【MySQL】1. MySQL安装

本文介绍了在Ubuntu 22.04系统上安装和配置MySQL 8.0的完整流程。主要内容包括:1)通过apt命令安装MySQL服务器;2)使用mysql_secure_installation进行安全初始化配置;3)验证服务状态和管理MySQL服务;4)两种登录MySQL的方式及验证方法;5)核心配置文件的修改与管理。文章还解答了关于二进制日志文件(binlog)的常见问题,提供了从安装到配置的一站式指导,适合需要快速部署MySQL的用户参考。关键步骤配有详细说明和验证方法,确保安装配置的正确性和安全性。

2026-02-22 16:18:22 1109 2

原创 多路转接epoll+Reactor反应堆

本文介绍了Linux系统中的两种I/O多路复用接口poll和epoll。poll接口通过pollfd结构体管理监听事件,解决了select的文件描述符数量限制问题,但仍存在性能瓶颈。epoll是poll的增强版本,通过epoll_create、epoll_ctl和epoll_wait三个系统调用实现高效的事件管理,解决了poll的性能缺陷,成为Linux下最优的多路I/O复用机制。文章详细分析了两种接口的函数原型、参数说明、就绪条件判断、优缺点对比,并提供了poll监控标准输入的代码示例。

2026-02-15 20:12:35 779

原创 多路转接select系统调用详解

摘要:select系统调用是经典的I/O多路复用实现,允许单进程监视多个文件描述符的可读、可写和异常状态变化。其核心机制是通过位图fd_set结构来管理待监视的fd集合,当有fd状态变化或超时触发时解除阻塞。调用时需设置最大fd值+1(nfds)和超时参数,返回后内核会重写fd_set仅保留就绪fd。使用时需注意每次调用前重新初始化fd_set,避免脏数据问题。select适用于socket编程,可高效检测连接、数据传输等网络事件的就绪状态。

2026-02-08 13:07:16 882

原创 五种IO模型与非阻塞IO

文章摘要:本文系统介绍了Unix/Linux系统中的五种I/O模型:阻塞I/O、非阻塞I/O、I/O多路复用、信号驱动I/O和异步I/O。重点分析了各模型在数据等待和复制阶段的特性,指出同步I/O与异步I/O的本质区别在于数据复制阶段是否阻塞。通过对比表格详细展示了各模型的实现难度、CPU利用率和并发能力,指出I/O多路复用模型在高并发场景中的优势。文章还澄清了同步/异步通信的概念差异,为网络编程中的I/O模型选择提供了理论依据。

2026-02-04 17:43:26 1238

原创 NAT 技术、代理服务与内网穿透:原理、缺陷及应用场景全解析

摘要: NAT技术通过私有IP与公网IP的转换缓解IPv4地址不足问题,核心包括地址转换(NAPT)和映射表维护,但存在外网无法主动连接内网、资源开销大等缺陷。代理服务器分为正向代理(客户端侧)和反向代理(服务端侧):正向代理实现缓存加速、访问控制及客户端隐藏,适用于企业内网管理;反向代理提供负载均衡、安全防护及缓存加速,是高并发网站和业务系统的关键组件。两者分别从客户端和服务端优化网络通信与安全。

2026-01-29 10:21:26 1029

原创 数据链路层核心全解:以太网、MAC 地址、MTU 与 ARP 协议深度剖析

本文深入解析了计算机网络中数据链路层与网络层的核心概念及其协作关系。数据链路层(如以太网)负责局域网内基于MAC地址的可靠传输,通过帧格式(含目的/源MAC地址、类型、数据、CRC校验)实现点对点通信,受MTU(如以太网1500字节)限制。网络层则基于IP地址实现跨网络路由,通过分片机制适配不同链路的MTU差异。文章详细对比了MAC地址(物理标识)与IP地址(逻辑标识)的区别,并分析了MTU对UDP(增加分片丢失风险)和TCP(通过MSS协商避免分片)协议的影响,揭示了网络协议栈各层协同工作的技术细节。

2026-01-29 10:14:08 888

原创 从寻址到转发:网络层 IP 协议全流程工作原理详解

本文分析了TCP/IP协议栈中网络层与传输层的核心功能及协作关系。网络层(IP协议)负责跨网络的路由寻址和主机间数据包传输,采用"尽力而为"机制但不保证可靠性。传输层(TCP/UDP)则确保端到端的可靠传输,TCP通过序列号、确认应答等机制弥补IP层的不可靠性。文章通过快递运输的类比,形象说明了两者的分工:IP层如同物流运输,TCP层则负责质量监控。此外,详细解析了IP协议的核心构成,包括地址结构、分片重组机制及协议头格式,并介绍了网段划分原则和DHCP动态配置技术。

2026-01-29 10:07:22 1937 1

原创 图解 TCP:从滑动窗口到拥塞避免,彻底搞懂 TCP 的可靠性机制

TCP协议通过滑动窗口机制提高传输效率,允许发送方在未收到确认时连续发送多个数据包。窗口大小决定了无需等待确认即可发送的数据量,窗口滑动依据ACK应答进行移动。针对丢包问题,TCP采用快重传机制(连续收到相同ACK时重发丢失数据包)和超时重传机制。流量控制通过接收方通告窗口大小动态调整发送速率,避免缓冲区溢出。拥塞控制采用慢启动机制,拥塞窗口呈指数增长(1,2,4,8...)以探测网络容量,实际发送窗口取拥塞窗口和接收窗口的最小值。这些机制共同保障了TCP的可靠性和网络适应性。

2026-01-20 10:34:55 713

原创 面试必问:TCP 三次握手与四次挥手详解

TCP协议详解 TCP四层模型:传输控制协议,负责数据传输的可靠控制 协议段格式:首部20-60字节,包含端口号、序号、确认号、标志位等关键字段 可靠性机制: 确认应答(ACK)机制保证历史消息可靠 32位序号和确认号实现数据排序和去重 丢包处理:通过超时重传机制动态计算重传时间 连接管理: 三次握手建立连接(SYN+ACK) 四次挥手终止连接 RST标志位强制中断异常连接 TCP通过序号、确认应答、超时重传等机制确保可靠传输,同时提供流量控制和连接管理功能。

2026-01-20 10:26:57 1019

原创 拆解 UDP 协议:从协议格式理解UDP

本文介绍了端口号与UDP协议的核心概念。端口号用于标识主机上的应用程序,分为知名端口号(0-1023)和动态端口号(1024-65535)。UDP协议具有无连接、不可靠、面向数据报和全双工的特点,其首部仅8字节,包含源/目的端口号、长度和校验和字段。UDP的发送缓冲区不存在,接收缓冲区则通过sk_buff结构管理报文。sk_buff是Linux内核网络协议栈的核心数据结构,通过移动指针实现高效封装和解包,避免内存拷贝,体现了UDP轻量化、低开销的设计理念。

2026-01-17 15:28:29 761 1

原创 HTTP 协议深度解析:请求/响应、报头、正文的核心原理与实战

HTTP协议是应用层的超文本传输协议,用于客户端与服务器之间的通信。它具有无连接、无状态等特点,默认使用80端口。URL作为统一资源定位符,通过协议+域名+路径的组合唯一标识网络资源。HTTP请求和响应采用固定格式,通过空行分隔报头和有效载荷。URL编码(urlencode)和解码(urldecode)用于处理特殊字符传输问题。HTTP协议通过文本拼接和分隔符解析实现序列化与反序列化,是Web数据交互的基础。

2026-01-15 16:48:20 1148

原创 网络计算器实现 - 自定义套接字+序列化+守护进程

文章摘要:本文实现了一个基于TCP协议的网络计算器系统,采用分层架构设计,包含服务端和客户端两个部分。服务端采用守护进程模式运行,通过TcpServer类处理网络连接,Protocol类实现自定义传输协议(使用JSON序列化和编码),Cal类完成实际计算功能。客户端通过TcpSocket与服务端通信,使用相同的协议进行数据交换。系统重点解决了TCP流式数据的处理问题,通过循环读取和缓冲区管理确保完整请求的获取。整体架构清晰,实现了网络计算器的基本功能,包括请求处理、结果返回和数据传输等核心流程。

2026-01-11 12:51:06 727

原创 Linux进程组、会话、作业控制与守护进程核心知识点 - 进程在终端中到底是怎样组织的

本文介绍了Linux系统中的进程组、会话和作业控制概念。进程组是一个或多个进程的集合,由组长进程管理;会话则是多个进程组的集合,通过setsid函数创建。控制终端与会话相关联,前台进程组接收终端输入信号。作业是用户启动的任务进程集合,可通过作业号进行管理,支持挂起(Ctrl+Z)和恢复(fg/bg)操作。这些机制共同构成了Linux系统的进程管理和作业控制基础。

2026-01-09 16:06:39 1201

原创 应用层自定义协议与序列化一站式指南

本文介绍了网络编程中应用层协议的核心概念及实现技术。首先阐述了应用层的定义和作用,重点讲解了协议的本质是结构化数据的约定,以及序列化与反序列化的关键作用。其次深入分析了网络数据传输的本质,解释了TCP全双工通信的实现原理。最后详细介绍了Jsoncpp库的特性、安装方法和Json::Value类的常用操作,为处理JSON数据提供了实用指导。全文通过概念解析、技术原理和具体实现三个层面,系统性地讲解了网络应用开发的关键技术要点。

2026-01-09 13:16:40 980

原创 从原理到实战:TCP 核心接口 + 典型案例 + 调试工具全攻略

本文摘要:文章详细介绍了TCP Socket编程的核心API接口,包括socket创建、bind绑定、listen监听、accept接收和connect连接建立等关键函数的功能、参数及返回值。同时解析了read/write在TCP通信中的使用特点,强调TCP字节流协议的特性。最后通过简单通信功能的实现流程,展示了服务端和客户端的基本交互过程,包括套接字初始化、连接建立、数据读写等环节,为TCP网络编程提供了实用参考。

2026-01-08 11:12:57 1634

原创 拒绝纸上谈兵!UDP 群聊功能实战:从 0 到 1 写出行云流水的代码

本文实现了一个基于UDP协议的群聊系统,主要包含三个核心模块:字节序转换类InetAddr、消息路由功能Route和服务端实现UdpServer。InetAddr类封装了网络与主机字节序的相互转换功能;Route类负责管理在线用户列表,并将接收到的消息转发给所有用户;UdpServer通过socket创建通信端点,绑定端口并处理消息收发。系统采用线程池处理多用户连接,实现了群聊消息的广播功能,支持用户加入/退出群聊的动态管理。整体架构简洁高效,通过路由转发机制有效模拟了群聊场景。

2026-01-07 20:17:46 919

原创 网络通信实战-UDP实现网络英汉字典

本文介绍了网络编程中IP地址格式转换的扩展接口和字典服务的实现。第一部分详细讲解了支持IPv4/IPv6的转换函数inet_pton和inet_ntop,包括函数功能、参数说明和返回值处理。第二部分展示了字典服务的实现,重点包括:1)封装InetAddr类实现网络字节序到主机字节序的转换;2)使用智能指针管理资源;3)通过unordered_map实现字典加载和翻译功能。代码示例提供了网络地址转换和字典查询的具体实现方案,适用于UDP服务端-客户端通信场景。

2026-01-05 18:43:54 1061

原创 UDP 通信接口全维度解析:API 设计原理、调用规范与应用实战

本文概述了网络通信中socket套接字的主要编程接口,重点阐述了UDP通信的相关接口实现。socket API作为抽象的网络编程接口,通过统一的sockaddr结构体设计支持多种网络协议。文章详细介绍了创建套接字(socket)、绑定端口(bind)等核心接口,并解析了sockaddr和sockaddr_in地址结构体的区别与联系。针对UDP无连接通信,说明了服务器和客户端的实现要点,包括使用INADDR_ANY绑定所有网络接口地址的特殊意义。通过分析接口设计思路,展现了socket编程的通用性和扩展性特点

2026-01-04 12:25:27 828

原创 TCP/IP网络传输的基本要素剖析

本文摘要:网络通信的核心是通过IP地址定位主机,端口号标识进程,实现跨主机进程间通信。IP地址确保数据到达目标主机,端口号则精确交付到目标进程。传输层协议(TCP/UDP)与IP、端口号共同构成套接字(Socket),作为网络通信的唯一标识。端口号分为知名、注册和动态端口三类,需遵循同一协议下端口独占原则。网络通信本质是进程间通信,通过内核的传输层协议栈完成数据交互。建立通信需创建套接字,绑定IP和端口,再进行数据传输。

2026-01-03 19:05:59 1376 1

原创 计算机网络核心概述:网络通信协议及传输流程深度解析

本文介绍了计算机网络的发展历程和协议分层思想。网络发展经历了独立模式、网络互联、局域网和广域网四个阶段。协议分层通过OSI七层模型和TCP/IP四层/五层模型实现解耦与标准化,各层明确分工:物理层处理信号传输,数据链路层管理帧传送,网络层负责路由选择,传输层确保端到端通信,应用层支持具体服务。分层设计提高了网络的可维护性和扩展性,使异构设备能够高效互联。

2026-01-03 17:48:32 1252

原创 19.【Linux系统编程】线程安全概述

本文摘要:文章系统阐述了线程安全与可重入的概念及区别,指出可重入函数必定线程安全但反之不一定成立。详细分析了死锁的四个必要条件及避免方法,讨论了STL容器和智能指针的线程安全性。最后介绍了悲观锁、乐观锁等常见锁机制,其中乐观锁通过版本号或CAS操作实现无锁并发。全文从理论到实践,全面解析了多线程编程中的关键问题,为开发者提供了重要参考。

2025-12-31 11:01:51 667 1

原创 18.【Linux系统编程】Linux线程池实现(从互斥、同步到日志+线程池完整代码实现带注释详解)

本文介绍了池化技术和日志系统的实现方法。池化技术通过预分配资源(如内存池、线程池)减少与操作系统的交互,提升系统效率。日志系统采用策略模式设计,支持将日志输出到控制台或文件,包含时间戳、日志等级等必要信息,并通过封装锁机制保证线程安全。日志实现部分展示了互斥锁封装和两种日志策略(控制台输出和文件输出)的具体代码实现。

2025-12-30 08:54:50 1735

原创 17-3.【Linux系统编程】POSIX 信号量核心用法拆解:零基础也能看懂的同步方案

POSIX信号量是内核级/用户级的同步原语,本质是一个受保护的非负整数计数器,通过PV操作实现资源的有序分配。分为二值信号量(类似互斥锁)和计数信号量(支持资源分块使用)。核心特性包括原子性、阻塞唤醒机制和跨场景支持(线程/进程同步)。环形队列是基于固定数组的循环数据结构,通过头尾指针和模运算实现空间复用,需解决空/满判定的二义性问题,常见方案包括引入计数变量或牺牲一个存储位置。这两种机制在多线程编程中常用于实现生产者-消费者模型等同步场景。

2025-12-30 08:50:27 766

原创 17-2.【Linux系统编程】线程同步详解 - 条件变量的理解及应用

本文探讨了线程同步的核心概念及其解决互斥锁带来的问题。通过自助取款机场景类比,说明基础互斥锁虽然保证资源安全但可能导致线程饥饿,而同步机制通过排队规则实现有序访问。文章详细介绍了条件变量的工作原理,包括等待-唤醒机制及其在快递柜存取件场景中的实际应用。最后通过代码示例演示了条件变量的具体使用方法,展示了如何让线程按顺序执行,从而解决互斥锁的不公平性问题,实现高效有序的线程协作。

2025-12-29 10:20:50 989

原创 17-1.【Linux系统编程】线程互斥详解 - 互斥量(锁)的理解及应用

本文讨论了多线程编程中的互斥问题及其解决方案。主要内容包括:1)进程/线程间互斥的基本概念,如共享资源、临界区和原子性;2)多线程并发操作的核心问题——竞态条件,通过售票系统示例展示了未加锁保护时共享变量操作导致的数据不一致问题;3)互斥锁的使用方法,包括初始化、加锁和解锁操作,强调锁的原子性保护作用。文章指出,互斥锁能将并发执行的临界区代码转为串行执行,有效解决竞态条件问题,确保线程安全。关键代码示例展示了未加锁时的错误情况和加锁后的正确实现方式。

2025-12-29 10:12:03 715

原创 16-2.【Linux系统编程】线程控制(POSIX线程库、线程创建、等待、终止、分离线程,多线程创建;线程ID及进程地址空间布局;线程的局部存储)

本文介绍了Linux线程的基本概念和实现方法。主要内容包括:1)通过pthread库创建线程,演示线程ID(tid)和轻量级进程ID(LWP)的区别;2)线程共享进程资源的特点,包括全局变量和函数;3)线程调度机制和崩溃影响;4)C++11线程库在Linux下的pthread封装实现。代码示例展示了线程创建、运行和回收(pthread_join)的基本操作,并解释了线程ID的本质是pthread库维护的进程内唯一标识。

2025-12-22 15:17:44 1322

原创 16-1.【Linux系统编程】线程概念(线程优缺点、异常、用途;进程和线程之间的联系)

文章摘要 本文系统介绍了Linux线程的核心概念,从感性认知到理性分析层层深入。首先从教材定义出发,解释线程作为进程内部执行分支的特性,对比进程与线程的资源分配差异。重点分析了Linux线程的轻量级进程实现方式,以及不同操作系统对线程管理的差异。随后深入探讨了虚拟内存和分页机制的原理,包括物理内存管理中的页框划分、struct page结构体设计等底层实现细节。文章通过图解方式清晰展示了虚拟地址到物理地址的映射过程,以及页表在内存管理中的关键作用,为理解Linux线程机制提供了全面的理论基础。

2025-12-22 15:16:13 1344

原创 15-3.【Linux系统编程】进程信号 - 信号捕捉(信号捕捉流程、操作系统运行方式及流程、内核态和用户态、可重入函数、volatile防止优化)

本文介绍了Linux系统中进程信号的信号捕捉的流程和操作系统运行机制。信号处理不是立即执行,而是在进程从内核态返回用户态时进行检查处理。信号捕捉过程涉及用户态和内核态切换,当信号递达时会调用用户自定义处理函数。操作系统通过硬件中断和时钟中断驱动运行,时钟中断定期触发进程调度。操作系统本质上是一个基于中断的死循环,通过中断向量表响应各种事件。

2025-12-16 10:51:25 910

原创 15-2.【Linux系统编程】进程信号 - 信号保存(信号处理流程的三种状态:未决、阻塞、递达,信号保存由未决表完成、sigset_t信号集类型及相关函数)

本文介绍了Linux系统中进程信号的信号的三种状态及保存方。内核通过未决信号集(pending)为每个进程存储已产生但未处理的信号。信号处理流程包含三种状态:信号递达(Delivery)、信号未决(Pending)和信号阻塞(Block)。内核使用三张表管理信号:pending表记录未决信号,block表记录阻塞状态,handler表存储信号处理函数指针。信号集操作函数包括sigemptyset、sigfillset等,可以读取或修改信号屏蔽字(sigprocmask)和未决信号集(sigpending)。

2025-12-16 10:50:08 1163

原创 15-1.【Linux系统编程】进程信号 - 信号的产生(信号概念、自定义信号捕捉singal函数、前台/后台进程、系统调用kill发送信号)

本文介绍了Linux系统中进程信号的信号产生方式及流程。信号是进程间异步事件通知的一种方式,通过中断当前操作来实现。文章通过快递的类比解释了信号的产生、识别、处理时机和方式等核心概念。主要内容包括:1) 信号与信号量的区别;2) 信号的产生方式,特别是通过键盘发送信号(如Ctrl+C);3) 使用signal()函数自定义信号处理;4) 前台进程和后台进程的区别,以及它们对信号的不同响应方式。文章还提供了相关代码示例和命令操作说明,帮助理解信号处理的实际应用场景。

2025-12-16 10:48:14 1211

C++用哈希表封装unordered-map和unordered-set

C++用哈希表封装unordered_map和unordered_set

2025-05-27

C++封装红黑树实现map和set

C++封装红黑树实现mymap和myset

2025-05-26

C++-红黑树的实现完整代码

C++-红黑树的实现完整代码

2025-05-23

单链表-C语言实现代码

C语言实现单链表,包括增(头插、尾插、指定位置之前插入、指定位置之后插入)删(头删、尾删、指定位置删除、指定位置之后删除)查(查找对应节点的地址)、链表的销毁、以及测试用例。

2025-08-02

通讯录程序实现-C语言顺序表实现

用C语言顺序表实现通讯录功能,包括通讯录的增删查改操作,以及通讯录数据保存到本地文件,本地文件数据导入到通讯录。

2025-07-31

顺序表-C语言实现代码

C语言实现顺序表,包括增(头插、尾插、指定位置之前插入)删(头删、尾删、指定位置删除)查(查找对应元素的下标)函数。

2025-07-31

C++-AVL树的实现

C++-AVL树的实现

2025-05-23

内核空间 MPU6050 体感鼠标驱动程序

内核空间 MPU6050 体感鼠标驱动程序

2025-05-21

混杂设备驱动led流水灯实现

混杂设备驱动led流水灯实现,该驱动控制 3 个 LED,通过写入/读出 3 个字节来设定、读入 3 个引脚电平。每个字节代表一个引脚。

2025-05-21

用户空间 MPU6050 体感虚拟鼠标驱动程序

用户空间 MPU6050 体感虚拟鼠标驱动程序

2025-05-21

linux嵌入式系统内核实现mpu6050体感鼠标移动功能(无按键)

linux嵌入式系统内核实现mpu6050体感鼠标移动功能(无按键)

2025-05-16

linux嵌入式开发板用户驱动体感光标实现

linux嵌入式开发板用户驱动体感光标实现

2025-05-08

C++二叉搜索树key-value的实现

C++二叉搜索树key_value的实现

2025-04-11

C++二叉搜索树的实现代码

C++二叉搜索树的实现代码

2025-04-11

C++stack(栈)、queue(队列)、priority-queue(堆)的模拟实现

用C++的vector、list和deque实现C++stack(栈)、queue(队列)、priority_queue(堆)

2025-03-03

C++list的模拟实现

C++list的模拟实现,构造,拷贝构造,析构函数;“=”," * ","->"运算符重载;begin(),end()函数;空间容量:size,empty等;增删查改:push_back,push_front,pop_back,pop_front,insert,erase。迭代器和const迭代器实现,用模板复用迭代器类,erase函数调用时iterator迭代器失效等。代码及测试

2025-02-27

C++日期类的实现,包括日期+,+=,-,-=和>,<,>=,<=,==,!= ;日期 - 日期 得天数 ;流提取>>,流插入<< 运算符重载等

C++日期类的实现,包括日期+,+=,-,-=和>,<,>=,<=,==,!= ;日期 - 日期 得天数 ;流提取>>,流插入<< 运算符重载等

2025-02-15

C++vector的模拟实现

C++vector的模拟实现,构造,拷贝构造,析构函数;“=”,“[ ]”运算符重载;begin(),end(),函数;空间容量:size,capacity,empty等;增删查改:push_back,pop_back,insert,erase,resize,reserve。代码及测试

2025-02-25

C++string类的模拟实现

C++string类的模拟实现。包括默认构造,拷贝构造,析构函数;运算符重载:=、[ ]、==、!=、<、<=、>、>=;输入输出运算符重载<<、>>;转C字符串c_str()、清空数据clear()、获取字符个数size、提前开空间reserve、尾插字符push_back、尾插字符串append、+=运算符重载、插入insert、删除erase、查找find、复制拷贝substr、输入一行gerline的实现。

2025-02-21

巡迹小车 - 副本 (2).zip

七路寻迹小车代码

2021-07-26

Linux网络-Reactor反应堆

Linux网络-Reactor反应堆

2026-02-15

linux网络-多路转接select的使用

linux网络-多路转接select的使用

2026-02-08

网络-http协议-http协议简单服务器实现

网络-http协议-http协议简单服务器实现

2026-01-15

网络-http协议-http协议关于form表单的GET和POST方法解析

网络-http协议-http协议关于form表单的GET和POST方法解析

2026-01-15

网络-网络计算器+序列化反序列化+守护进程

网络-网络计算器+序列化反序列化+守护进程

2026-01-11

网络-TCP-TCP简单通信,网络字典,远程控制功能实现

网络-TCP-TCP简单通信,网络字典,远程控制功能实现

2026-01-08

网络通信-UDP-UDP实现网络群聊

网络传输-UDP-UDP实现网络群聊

2026-01-04

网络通信-UDP-UDP实现网络英汉字典

网络通信-UDP-UDP实现网络英汉字典

2026-01-04

网络通信-UDP-UDP实现服务-客户端通信

网络通信-UDP-UDP实现服务-客户端通信

2026-01-04

Linux系统-线程池-线程池的实现:包括互斥锁、条件变量、单线程、日志打印、线程池的实现

该代码实现了基于C++模板的单例模式线程池(header only),默认创建5个工作线程,通过互斥锁和条件变量保障并发安全;线程池初始化后工作线程阻塞等待任务,外部可通过Enqueue接口提交可调用类型任务(如Download),提交时唤醒休眠线程处理,Stop接口可优雅停止线程池(执行完剩余任务后退出),Join接口用于主线程回收线程资源,有效避免线程频繁创建销毁的开销,高效处理批量异步任务。

2025-12-23

POSIX信号量实现多线程代码

POSIX信号量实现多线程代码

2025-12-22

Linux操作系统-进程池-匿名管道进程池实现

Linux操作系统-进程池-匿名管道进程池实现

2025-11-17

linux系统-缓冲区-mystdio的实现

linux系统-缓冲区-mystdio的实现

2025-10-12

手搓shell进程,带有详细文章讲解

手动实现shell进程,带有详细文章讲解!

2025-09-23

Linux系统小程序-进度条实现

Linux系统小程序-进度条实现

2025-09-11

堆-二叉树的顺序结构-C语言实现

C语言堆结构体声明、初始化&销毁、向上调整、向下调整、插入、删除、取堆顶&判空。

2025-08-13

队列-C语言实现完整版代码

队列-C语言实现完整版代码:包括队列的结构、入队列、出队列、队列的初始化和销毁、取队头、取队尾、判空、获取队列的元素个数。

2025-08-08

栈-C语言实现完整版代码

栈-C语言实现完整版代码:包括栈的结构、入栈、出栈、栈的初始化和销毁、取栈顶、判空、获取栈的元素个数。

2025-08-08

贪吃蛇项目-C语言实现代码

本文详细介绍了使用C语言在Windows控制台环境下实现经典贪吃蛇游戏的全过程。项目通过Win32 API控制台操作、宽字符处理和链表数据结构等技术,实现了贪吃蛇的基本功能:方向控制、食物生成、蛇身增长、碰撞检测、得分计算等。文章分为游戏设计、技术实现和代码分析三部分,重点讲解了控制台坐标处理、宽字符显示、蛇身链表管理、游戏状态机等核心模块的实现方法,并提供了完整的代码示例。该项目可作为C语言学习者的综合编程实践案例,涵盖了函数、结构体、指针、内存管理等多项基础知识的应用。

2025-08-04

双向链表-C语言实现代码

C语言实现带头循环双向链表,包括增(头插、尾插、指定位置之后插入)删(头删、尾删、指定位置删除)查(查找对应节点的地址)、链表的初始化和销毁、以及测试用例。

2025-08-03

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除