自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(176)
  • 收藏
  • 关注

原创 Linux 网络基础之传输层TCP(七)确认应答机制,超时重传机制,连接管理机制(三次握手四次挥手),流量控制,滑动窗口,快重传

本文深入解析了TCP协议的五大核心机制:确认应答(ACK)、超时重传、连接管理(三次握手/四次挥手)、流量控制和滑动窗口。ACK机制通过序号确认保障数据可靠传输;超时重传动态调整等待时间处理丢包;连接管理详细阐述了三次握手建立连接和四次挥手断开连接的完整流程;流量控制通过窗口大小调节发送速率;滑动窗口则实现了高效批量数据传输和丢包处理。文章还探讨了TCP状态转换、半/全连接队列、TIME_WAIT状态等关键概念,并通过实验验证了accept与三次握手的关系,全面展现了TCP可靠传输的实现原理。

2026-05-18 10:35:49 299 4

原创 Linux 网络基础之传输层TCP(六)TCP报头格式,TCP可靠性,序号/确认序号,窗口大,标志位,初识三次握手四次挥手

本文系统讲解了TCP协议的核心机制与工作原理。首先介绍了TCP作为面向连接的可靠传输协议,通过三次握手建立连接确保双向通信能力,通过序号确认、超时重传等机制保障数据传输可靠性。文章详细解析了TCP报文头部结构,包括端口号、序号、确认号、窗口大小等关键字段的作用。重点阐述了流量控制、拥塞控制原理,以及SYN、ACK、FIN等6个标志位在三次握手和四次挥手过程中的核心功能。同时深入探讨了TCP全双工通信特性、字节流传输模式、紧急指针机制等底层实现原理,揭示了TCP如何在保证可靠性的同时兼顾传输效率。最后通过内核

2026-05-18 10:35:25 256 4

原创 Linux 网络基础(五)守护进程化,前后台进程组,作业,会话,setsid(),daemon(),端口号频繁更换问题

本文详细介绍了Linux进程管理体系中的前后台进程组、作业管理及守护进程化原理。主要内容包括:1. 进程组划分规则:前台进程组独占终端控制权,后台进程组可同时存在多个;2. 作业与进程组关系:每个后台进程组对应一个作业号,二者一一绑定;3. 会话管理机制:每个终端登录创建独立会话,包含bash进程和终端设备文件;4. 守护进程化核心:通过fork()+setsid()使进程脱离原会话自立门户,配合工作目录切换和IO重定向实现服务持久化;5. 两种实现方案对比:手动封装Daemon函数与直接调用daemon(

2026-05-10 11:49:15 606 4

原创 Linux 网络基础(三)HTTP的请求方法(GET/POST),HTTP表单、临时和永久重定向状态码、Cookie、查询参数、Web根目录

这篇文章深入讲解了HTTP协议的多个核心细节,主要包括: 查询参数的结构与作用,解析了URL中问号后的键值对格式规范; 路由路径的匹配机制,说明服务器如何通过路径找到对应业务接口; Web根目录的概念及其在静态资源访问中的重要性; 表单提交的工作原理,对比GET和POST方法的本质区别; HTTP请求方法详解,重点区分GET(获取资源)和POST(提交数据)的使用场景; 报文头的关键作用,包括Host、Content-Type、Cookie等常见报头字段; 状态码分类解析,涵盖2xx成功、3xx重定向、4x

2026-05-09 20:15:16 765 4

原创 Linux 网络基础之UDP协议(四)传输层协议 UDP,再谈端口号,UDP 特点

本文深入解析了传输层UDP协议的核心机制。首先阐述了端口号与五元组的概念,指出端口号是进程级标识,与IP地址共同构成网络通信的完整地址。随后详细剖析了UDP协议格式,包括8字节固定报头(源/目的端口、长度、校验和)和数据载荷部分,强调其"面向数据报"的特性不会产生粘包问题。文章通过Linux内核源码分析,揭示了UDP协议在操作系统中的实现原理,包括sk_buff结构体的报文管理机制,以及从sock到inet_sock再到udp_sock的三层继承结构。最后总结了UDP无连接、不可靠但高效

2026-05-09 20:14:41 594 4

原创 Linux 网络基础(二)HTTP协议,域名,URL,URI,认识HTTP的请求和响应

HTTP 全称超文本传输协议(HyperText Transfer Protocol),是运行在 OSI 七层模型应用层的网络协议,它基于可靠的传输层 TCP 协议实现,是客户端与服务器之间沟通的标准化语言。简单来说,网络上的设备想要传递数据,必须遵循统一的规则,否则客户端发出的信息,服务器无法识别;服务器返回的内容,客户端也无法解析。而 HTTP,就是专门为网页浏览、接口通信、数据传输等场景,制定的一套通用、规范、全球统一的数据传输规则。

2026-05-06 16:08:46 511 4

原创 Linux 网络套接字编程(八)自定义实现 HTTP 服务器,HTTP 的工作模式

本文详细介绍了HTTP协议的工作模式及其自定义实现过程。HTTP采用客户端-服务器模式,基于TCP协议实现一问一答的无状态通信,包括建立连接、发送请求、返回响应和断开连接四个步骤。文章重点阐述了如何从零实现一个简易HTTP服务器,包括请求解析、响应构建、动态路由等核心功能模块。通过代码示例展示了HTTP报文解析、文件读取、MIME类型匹配等关键技术的实现,并比较了短连接和长连接的优缺点。最后提供了完整的服务器代码实现,支持浏览器和命令行工具测试,帮助读者深入理解HTTP服务器的底层工作原理。

2026-05-06 16:06:14 422 4

原创 Linux 网络套接字编程(七)TCP服务端和客户端的实现——网络版本计算器

本文详细讲解了一个基于TCP协议的网络计算器系统的设计与实现。系统采用分层架构,包含网络通信层(TcpServer)、协议解析层(Protocol)和业务计算层(Calculator),对应OSI模型的会话层、表示层和应用层。通过自定义应用层协议解决TCP粘包问题,使用JSON进行序列化和反序列化,实现了客户端请求的发送和服务端结果的返回。系统采用回调机制实现模块解耦,支持多进程并发处理。文章从设计框架到具体实现,详细讲解了Socket封装、协议处理、业务逻辑等核心模块,展示了运行效果和与OSI七层模型的对

2026-04-30 21:22:48 1032 4

原创 Linux 线程同步与互斥(六) 线程安全与重入问题,死锁,线程done

本文探讨了多线程编程中的核心问题:线程安全与重入、死锁机制以及STL和智能指针的线程安全性。线程安全指多线程访问共享资源时结果的正确性,通过加锁保护实现;重入分为多线程和信号重入,可重入函数通过避免全局变量和加锁确保安全。死锁由四个必要条件引发,可通过统一锁顺序、原子获取锁等方式避免。STL容器默认非线程安全,需自行加锁;智能指针中shared_ptr通过原子操作保证线程安全。文章为多线程开发提供了关键概念和解决方案。

2026-04-28 14:32:36 751 4

原创 Linux 网络套接字编程(六)TCP的通信是全双工的,自定义协议的定制,序列化和反序列化

本文深入解析了TCP通信的核心机制与应用层协议设计。首先阐述了TCP全双工通信原理,指出内核通过独立的发送/接收缓冲区实现读写并行。接着揭示了TCP字节流特性导致的粘包/拆包问题,提出三种解决方案:固定长度法、特殊结束符法和长度头协议法(最优)。然后重点讲解了序列化/反序列化技术,将结构化数据转换为二进制流以适应网络传输,推荐使用JsonCpp等成熟库而非手动实现。最后通过实例演示了JsonCpp的序列化与反序列化流程,验证了其在处理复杂数据结构时的有效性。全文系统性地构建了从传输层到应用层的完整网络通信知

2026-04-28 14:32:23 862 5

原创 Linux 网络套接字编程(五)TCP 回声服务器的实现(单进程(单线程)/多进程/多线程/线程池四个版本)

本文详细介绍了从UDP过渡到TCP协议的学习过程,对比了两种协议的核心差异。TCP协议具有连接可靠、有序传输等特点,适合正式业务场景。文章通过四个阶段逐步实现TCP服务端:单线程版本梳理基础流程;多进程版本引入并发处理;多线程版本优化资源开销;最终采用线程池模型实现高效可控的并发。每个阶段都包含代码实现和运行验证,完整展现了TCP服务器的开发演进路径,为网络编程提供了实用参考。

2026-04-26 19:58:41 1009 2

原创 Linux 网络套接字编程(四)支持多客户端同时在线、消息能转发给所有人的 UDP 聊天室服务器

本文详细介绍了从单线程UDP服务器逐步迭代开发为多线程并发聊天室服务器的完整过程。首先通过InetAddr类标准化客户端身份描述,实现IP和端口的统一封装;然后设计UserManager模块管理在线用户列表;接着构建Route路由转发模块实现消息广播业务逻辑;最后引入线程池ThreadPool实现异步任务处理。服务端采用回调机制解耦网络层与业务层,主线程专注网络IO,业务处理交由线程池并发执行。客户端通过双线程模型分别处理消息收发,与服务端形成完整通信链路。整个项目展示了网络编程、多线程、模块化设计等核心技

2026-04-26 19:58:32 716 3

原创 Linux 线程同步与互斥(五) 日志,线程池

本文介绍了线程池和日志系统的设计与实现。线程池采用池化技术复用线程,减少频繁创建销毁的开销,通过任务队列和条件变量实现生产者-消费者模型,支持多线程并发任务处理。日志系统基于策略模式设计,支持控制台和文件两种输出方式,提供线程安全的高精度时间戳记录功能。两者结合实现了高效的任务调度和日志记录,其中线程池通过智能指针管理资源,日志系统采用RAII风格确保资源释放。测试结果表明系统能正确处理并发任务并输出格式规范的日志,验证了设计的正确性和可靠性。

2026-04-24 13:47:58 650 2

原创 Linux 网络套接字编程(三)UDP服务器与客户端实现:Windows与Linux通信,新增字典翻译功能的 UDP 通信

本文验证了Windows与Linux系统间基于UDP协议的网络通信可行性,并实现了字典翻译功能的服务端分层架构改造。主要内容包括: 跨平台通信验证:Windows客户端通过VS2022开发,调用标准Socket接口与Linux服务端成功实现UDP通信,证明不同操作系统间网络互通的可行性。 服务端架构升级: 将原有回声服务改造为两层架构:底层网络IO模块负责数据传输,上层Dict模块专注业务逻辑 通过回调机制实现解耦,网络层调用注入的翻译函数处理数据 新增Dict类实现字典加载和单词翻译功能 功能实现: 客户

2026-04-24 13:47:11 689 2

原创 Linux 网络套接字编程(二)从 0 到 1 实现 UDP 回声服务器,recvfrom,sendto

本文基于C++实现了一个UDP回声服务器,通过构建完整的客户端/服务端通信模型,将Socket网络编程理论转化为实践。服务端采用面向对象设计,封装了socket创建、端口绑定、数据收发等核心功能,支持多网卡监听;客户端主动发起通信,由系统自动分配临时端口。文章详细解析了UDP无连接通信的特点、IP与端口的作用机制,以及内核缓冲区的工作流程,并通过本地回环、内网和公网三种场景验证了程序功能。代码实现了服务端对客户端消息的原样回显,展示了UDP协议"发什么回什么"的核心逻辑,为后续网络编程学

2026-04-23 16:00:40 610 1

原创 Linux 网络套接字编程(一)端口号port,socket套接字,socket,bind,socket 通用结构体

本文系统介绍了网络通信的基础概念与实现机制。首先阐述了端口号的作用,它是传输层标识主机内进程的关键标识,与IP地址共同构成网络通信的地址基础。接着深入分析了网络通信的本质是跨主机的进程间通信,而Socket作为操作系统提供的网络接口,屏蔽了底层细节,使进程能够便捷地进行网络数据传输。文章详细讲解了TCP和UDP协议的特点与适用场景,TCP提供可靠连接而UDP侧重高效传输。此外还介绍了网络字节序的重要性及转换方法,确保数据在不同主机间正确传输。最后详细解析了Socket编程的核心API,包括socket()创

2026-04-23 16:00:22 391 1

原创 Linux 线程同步与互斥(四) POSIX信号量,基于环形队列的生产者消费者模型

本文系统讲解了POSIX信号量的原理及其在环形队列生产者消费者模型中的应用。信号量本质是带计数器的同步原语,通过P/V原子操作实现资源申请与释放,其内部已封装锁机制,可替代显式互斥锁+条件变量的实现方式。针对环形队列的特性,采用空槽信号量(blank_sem)和数据信号量(data_sem)的双信号量方案:生产者通过P(blank_sem)获取空槽,生产后V(data_sem);消费者通过P(data_sem)获取数据,消费后V(blank_sem)。对于多生产者多消费者场景,需额外加锁保护队列指针操作。相

2026-04-21 21:35:26 443 1

原创 Linux 网络基础(一)认识协议,网络协议,网络协议分层框架搭建,网络传输基本流程,跨网络的数据传输

本文系统介绍了计算机网络的发展历程、核心概念和分层模型。主要内容包括:1. 网络发展历史:从单机孤岛、软盘拷贝到客户端-服务器模式,再到局域网和广域网的演进过程,最终形成全球互联的互联网。2. 远距离传输的四大核心问题:相邻设备通信、主机定位、数据丢失处理和接收方数据处理,分别对应数据链路层、网络层、传输层和应用层的功能。3. 协议的本质:通信双方约定的结构化数据格式,体现为各层的协议头和分用机制,确保数据能被正确解析。4. 分层模型:重点介绍OSI七层模型和实际应用的TCP/IP四层(五层)模型,分析各层

2026-04-21 17:44:13 1477 1

原创 Linux 线程同步与互斥(三) 生产者消费者模型,基于阻塞队列的生产者消费者模型的代码实现

生产者消费者模型通过缓冲队列解耦生产与消费过程,实现高效并发处理。该模型包含生产者、消费者和共享队列三种角色,通过互斥锁保证队列访问安全,使用条件变量实现线程同步。生产者将数据放入队列,消费者从队列取出数据,当队列满时生产者等待,队列空时消费者等待。模型采用"321原则":3种线程关系(生产者间、消费者间、生产消费间互斥)、2种角色、1个共享场所。其高效性体现在生产与消费过程可并行执行,同时支持忙闲不均的场景。实现时需注意虚假唤醒问题,建议使用while循环而非if判断条件。通过水位线机

2026-04-12 14:52:50 581 3

原创 Linux 线程同步与互斥(二) 线程同步,条件变量,pthread_cond_init/wait/signal/broadcast

本文深入讲解了线程同步机制,重点分析了条件变量的工作原理及其与互斥锁的配合关系。文章通过生动的生活案例(VIP自习室、食堂打饭窗口)类比线程同步问题,形象解释了互斥锁保证资源独占访问、条件变量解决等待唤醒的核心机制。详细剖析了条件变量的关键操作:pthread_cond_wait会原子性地释放锁并进入等待队列;pthread_cond_signal/broadcast负责唤醒等待线程。特别强调了条件变量必须与互斥锁配合使用,以及线程唤醒后仍需重新抢锁才能继续执行的同步逻辑。通过代码示例展示了条件变量的实际应

2026-04-09 09:10:12 499 1

原创 Linux 线程同步与互斥(一)线程的并发问题,线程的互斥锁,C++中的互斥锁

本文探讨了多线程并发中的临界资源保护问题。通过抢票案例分析了无锁保护下共享变量ticket出现负数票的并发问题根源:非原子操作被线程切换打断导致数据竞争。介绍了互斥锁(mutex)的解决方案,包括C语言的pthread_mutex_t实现和C++的std::mutex与std::lock_guard封装。深入剖析了锁的底层原理:通过CPU原子指令和内存状态交换实现线程互斥。最后展示了如何用RAII思想封装自定义锁类,确保临界区安全访问。锁的本质是通过软件机制模拟硬件原子性,解决多线程并发访问共享资源的问题。

2026-04-09 09:08:55 411 1

原创 Linux 多线程(四)线程等待,线程分离,线程管理,C++多线程,pthread库

本文深入讲解了Linux线程管理的核心内容,包括线程等待、分离、ID管理及线程局部存储等关键机制。重点分析了pthread_join的线程资源回收原理,解释了分离线程(detached)的自动释放特性。详细阐述了用户态线程控制块(TCB)与内核轻量级进程(LWP)的1:1对应关系,揭示了Linux线程模型的本质。同时介绍了__thread关键字实现的线程局部存储(TLS)机制,以及C++标准线程库对pthread的跨平台封装。通过底层原理分析与代码示例,全面展示了Linux线程从创建到回收的完整生命周期管理

2026-04-06 22:32:50 644 2

原创 Linux 多线程(五)用C++语言以面向对象方式封装线程

本文介绍了使用C++面向对象方式封装线程的方法。主要内容包括:1) 通过Thread类封装线程生命周期管理,解决C++成员函数与pthread_create的类型兼容问题;2) 实现线程命名、状态管理、回调函数等功能;3) 通过vector/queue组织多线程,实现线程调度;4) 逐步优化线程参数传递机制,支持模板化参数;5) 分析多线程并发问题,如输出错乱和共享资源竞争。文章展示了从基础线程封装到高级线程管理的完整演进过程,为多线程编程提供了实用的面向对象解决方案。

2026-04-06 22:32:18 462 2

原创 Linux 多线程(三)线程控制,线程终止,线程中的异常问题

示例中定义的PrintName函数,可被所有新创建的线程在routine入口函数中正常调用,程序运行正常且各线程可独立输出自身标识信息。这。

2026-04-05 14:12:07 593 1

原创 Linux 多线程(一)线程概念,轻量级进程,执行流,线程创建

Linux线程本质上是轻量级进程(LWP),共享同一进程的资源(地址空间、页表等),但拥有独立的执行流(栈、寄存器等)。与传统进程相比,线程创建开销小,切换效率高,适合需要并发执行的场景。Linux通过clone系统调用实现线程,使用CLONE_VM等标志共享资源。线程在用户层通过pthread库封装,内核层则统一为task_struct结构管理。多线程程序运行时,CPU看到的只是多个执行流交替执行,所有线程共享相同的进程ID(PID),但各有独立的线程ID(LWP)。这种设计既保持了进程的资源隔离特性,又

2026-04-04 18:51:20 422 1

原创 Linux 多线程(二)进程虚拟地址空间&&页表&&物理地址

本文深入解析了操作系统内存管理的核心机制,重点阐述了虚拟地址空间、页表与物理内存的映射关系。主要内容包括:1. 物理内存被划分为4KB大小的页框,通过struct Page结构体和全局数组进行管理;2. 32位系统下每个进程拥有4GB虚拟地址空间,通过二级页表(页目录+页表)实现虚拟地址到物理地址的转换;3. MMU利用CR3寄存器、页目录和页表完成地址翻译,虚拟地址被分为高10位(页目录索引)、中10位(页表索引)和低12位(页内偏移);4. 关键机制包括懒加载、写时复制和缺页异常处理,这些机制基于页表实

2026-04-04 18:23:36 560 2

原创 Linux 进程信号(三)信号的捕捉,中断(硬件中断,软件中断,时钟中断,异常)

本文深入探讨了信号处理、中断机制与操作系统内核的运作原理。信号处理分为默认处理、忽略处理和自定义捕捉三种方式,其中信号捕捉通过注册处理函数实现异步响应。硬件中断由外设触发,通过中断控制器传递,CPU根据中断号查询中断向量表执行处理程序。时钟中断作为系统"心跳",驱动进程调度和时间管理。软中断(如系统调用)则由程序主动触发,实现用户态到内核态的切换。异常是CPU被动触发的软中断,用于处理程序错误。操作系统本质上是一个响应各种中断的死循环,通过中断处理例程完成所有工作,包括进程管理、设备驱动

2026-04-02 09:56:50 356 1

原创 Linux 进程信号(四)内核态&&用户态,sigaction,可重入函数,volatile,SIGCHLD信号

本文深入解析了Linux系统中用户态与内核态的进程地址空间管理机制。32位x86 Linux系统中,每个进程拥有4GB虚拟地址空间,其中0-3GB为用户空间(私有),3-4GB为内核空间(共享)。文章详细阐述了权限控制原理(CPL/DPL)、状态切换机制(中断/异常/系统调用)以及信号处理流程,重点分析了时钟中断如何周期性触发内核态切换(约10ms一次)。通过实际代码示例,展示了信号处理、可重入函数、volatile关键字应用等核心概念,并解释了子进程退出时发送SIGCHLD信号的工作机制。这些机制共同保障

2026-04-02 09:56:13 543 1

原创 Linux 进程信号(二)信号的保存,sigset_t,sigprocmask,sigpending

本文深入讲解了Linux进程信号管理的核心机制,重点分析了信号处理的三个关键数据结构:block表(阻塞信号集)、pending表(未决信号集)和handler表(信号处理函数表)。文章通过五个实验场景,详细演示了信号从产生、阻塞、未决到递送处理的完整生命周期。主要内容包括:1. 信号处理的基本概念:递送、未决、阻塞的区别 2. 三张核心表的作用与关系:block表控制信号递送,pending表记录待处理信号,handler表决定处理方式 3. 相关系统调用:sigprocmask修改阻塞集,sigpend

2026-03-29 14:26:42 648 1

原创 Linux 进程信号(一)信号的产生,signal,kill,raise,abort,alarm,core dump功能

本文深入讲解了Linux系统中的信号机制。信号是进程间异步通信的一种方式,分为产生、保存和处理三个阶段。信号来源包括键盘输入、硬件异常、系统命令、系统调用和软件定时器等。文章详细介绍了信号的默认处理、忽略和自定义捕捉三种方式,并通过代码示例展示了signal()、kill()、raise()、abort()和alarm()等系统调用的使用。重点分析了除0和野指针等异常导致进程崩溃的底层原理,即硬件报错触发内核发送信号。同时讲解了核心转储(coredump)的作用和调试方法,以及信号在进程控制块(task_s

2026-03-28 21:23:48 529 1

原创 Linux 进程间通信(五)System V通信方式之 消息队列、信号量

本文详细介绍了SystemV的三种进程间通信方式:共享内存、消息队列和信号量。共享内存通过直接映射内存区域实现高效数据传输;消息队列通过内核维护的带类型消息链表实现进程间有序通信;信号量则作为同步/互斥机制,通过原子计数器控制资源访问。三者都遵循SystemV标准,采用key+ID的标识方式,通过xxxget/xxxctl等系统调用操作,并由内核统一管理。文章重点剖析了消息队列的接口使用和内核数据结构设计,并深入讲解了信号量的原理及其PV操作机制。这些IPC机制共同构成了Linux系统进程间通信的基础设施。

2026-03-28 21:23:22 422 1

原创 Linux 进程间通信(三)命名管道

命名管道(FIFO)是一种解决非亲缘进程间通信的机制。与匿名管道不同,命名管道在文件系统中创建可见的管道文件(类型为p),任何进程都能通过路径访问。其核心原理是:多个进程打开同一个管道文件时共享内核缓冲区,通过各自的文件描述符进行读写操作。创建方式包括命令行mkfifo命令和程序中的mkfifo()函数。使用时需注意:默认阻塞打开(读端等待写端,反之亦然);数据传输仅在内核缓冲区进行,不写入磁盘;已建立的通信不受管道文件删除影响。命名管道实现了无关进程间的单向字节流通信,弥补了匿名管道只能用于亲缘进程的局限

2026-03-25 21:45:06 391 1

原创 Linux 进程间通信(四)System V共享内存

本文介绍了SystemV共享内存通信机制的原理与实现。共享内存通过内核开辟公共物理内存区域,由多个进程映射到各自虚拟地址空间实现高效通信,是速度最快的IPC方式。文章详细讲解了共享内存的创建、挂接、读写和释放流程,以及相关系统调用接口(shmget/shmat/shmdt/shmctl)的使用方法。通过代码示例展示了双进程通信的具体实现,并分析了共享内存零拷贝、高速度但缺乏同步机制的特性。最后比较了共享内存与管道的本质区别,指出共享内存适合大数据传输但需要额外同步机制保障数据安全。

2026-03-25 21:44:26 592 1

原创 Linux 进程间通信(一)进程间通信与匿名管道

本文介绍了Linux进程间通信(IPC)的基本概念与匿名管道的实现机制。进程间通信主要包括数据传输、资源共享、事件通知和进程控制四种目的。匿名管道是最古老的IPC方式,用于亲缘进程间的单向通信。文章详细阐述了匿名管道的创建过程、内核数据结构、读写机制以及五种特性:单向通信、血缘关系限制、字节流传输、随进程的生命周期以及自带的同步互斥机制。通过代码示例验证了管道的读写行为、写时拷贝特性以及异常处理流程,展示了Linux内核如何通过文件抽象和引用计数管理管道资源。

2026-03-22 17:26:35 888 1

原创 Linux 库制作与原理(三)深入动静态链接原理

本文系统讲解了程序链接与加载的核心机制。静态链接在编译阶段完成符号解析与地址重定位,将库代码直接复制到可执行文件中;动态链接则推迟到运行时,通过动态加载器完成库加载和地址绑定,实现多进程共享。文章详细分析了.o文件与可执行文件的ELF格式差异,通过符号表解析了静态链接的地址重定位过程,并深入剖析了动态库从磁盘加载到内存映射的全链路机制。最后对比了动静态链接在链接时机、内存共享、更新维护等方面的本质区别,揭示了现代操作系统管理程序执行环境的底层原理。

2026-03-20 19:20:10 424 1

原创 Linux 库制作与原理(二)ELF和可执行程序的加载(进程虚拟空间第二讲)

本文深入探讨了库的本质和可执行程序的加载机制。首先解释了动静态库的区别与使用规则,指出库本身不能主动申请空间,但能提供内存管理函数。详细介绍了ELF文件格式的组成结构(ELF头、程序头表、节头表和节),阐述了目标文件与可执行程序的区别。重点分析了程序加载流程:操作系统先建立进程数据结构,再按ELF程序头表将段映射到进程虚拟地址空间。解释了平坦内存模式下虚拟地址的本质,说明程序中的逻辑地址与进程虚拟地址实质相同。最后完整描述了从ELF文件加载到CPU执行的全过程,包括MMU通过页表将虚拟地址转换为物理地址的机

2026-03-19 19:44:24 697 1

原创 Linux 文件系统 (三) 软连接和硬链接

摘要:本文详细介绍了Linux系统中的软硬链接机制。软链接(符号链接)是独立的路径文件,仅存储目标文件路径,相当于快捷方式,支持跨文件系统;硬链接则是共享同一inode的文件名映射,不能跨文件系统且不能链接目录。文章通过命令行实例演示了创建方法(ln -s创建软链接,ln创建硬链接),并分析了inode编号、引用计数等底层机制。重点阐述了软链接在简化深路径访问、硬链接在目录导航(.和..)中的应用场景,以及操作系统限制目录硬链接防止环路的设计考量。最后对比了两种链接的特性差异和使用注意事项。

2026-03-18 09:55:17 571 1

原创 Linux库制作与原理(一)动静态库的制作与使用

本文详细介绍了Linux系统中动静态库的创建与使用方法。静态库(.a)在编译时将代码嵌入程序,运行时无需依赖;动态库(.so)在运行时加载,实现内存共享。制作库需将.c文件编译为.o目标文件,静态库用ar命令打包,动态库需加-fPIC和-shared选项。使用库时需同时提供头文件和库文件,可通过三种方式:1)拷贝到系统目录;2)指定路径(-I/-L);3)创建软链接。动态库运行时还需配置LD_LIBRARY_PATH环境变量或安装到系统目录。文章通过具体命令演示了库的封装、安装和使用全过程。

2026-03-18 09:55:11 343

原创 Linux 进程控制(四)自主Shell命令行解释器.

本文介绍了如何实现一个简单的Shell命令行解释器。Shell本质上是一个持续运行的循环,主要包含以下功能:1. 打印命令行提示符,通过环境变量获取用户名、主机名和当前路径;2. 使用fgets读取用户输入命令,处理换行符;3. 解析命令字符串,使用strtok分割命令和参数;4. 处理特殊命令:区分内建命令(如cd、echo)和外部命令,内建命令由父进程直接执行;5. 处理重定向命令(>、>>、<),子进程通过dup2实现I/O重定向;6. 使用fork创建子进程,通过execvp

2026-03-16 20:45:01 376 1

原创 Linux 文件系统 (二)深入理解文件系统

本文深入探讨了Linux文件系统的核心机制。文件系统作为管理文件的规则体系,通过块(block)、分区(partition)、inode等概念实现对磁盘空间的高效组织。重点分析了ext2文件系统的结构组成:超级块记录全局信息,块组描述符管理分区属性,块位图和inode位图标记资源使用状态,inode表存储文件属性,数据块存放文件内容。详细解释了目录作为特殊文件的实现原理,路径解析的逐级查找过程,以及路径缓存(DCache)的加速机制。最后阐述了进程与文件系统交互的数据结构关系,包括task_struct、f

2026-03-16 20:44:29 496

httpserver.zip

httpserver.zip

2026-05-02

空空如也

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

TA关注的人

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