自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ARM架构深度解析:从指令集到内核设计

指令集架构(Instruction Set Architecture, ISA)是计算机硬件与软件之间的关键接口规范,它定义了CPU能够理解和执行的所有指令集合。ISA本质上是一组二进制机器码的抽象描述,是程序员与硬件沟通的桥梁。为解决这个问题,汇编语言应运而生,它与机器码保持一一对应关系,但采用助记符形式更易理解。不同的CPU架构会采用不同的指令集,因而产生多种汇编语言变体。Thumb T=1,J=0 16位指令,高代码密度 嵌入式应用。ARM T=0,J=0 32位指令,高性能 系统内核代码。

2025-05-25 13:15:57 682

原创 深入理解万维网:URL、HTTP与HTML

统一资源定位符URL(Uniform Resource Locator)是万维网上用于标识和定位各种文档的标准方法,它使每个资源在互联网范围内具有唯一标识。HTTP(Hypertext Transfer Protocol)是用于分布式、协作式超媒体信息系统的应用层协议。• host - 定义域主机(默认www)• scheme - 定义因特网服务类型。关闭连接(HTTP/1.1默认保持连接)• filename - 定义资源名称。• domain - 定义因特网域名。• port - 定义主机端口号。

2025-05-21 16:04:13 1166 1

原创 Linux网络编程:广播、组播与原始套接字

广播是一种将数据发送到同一网络中所有设备的通信方式。发送者只需要发送一次数据,网络中的所有设备都会接收到这些数据。组播(多播)是一种允许将数据发送到一组特定接收者的通信方式,相比广播更加高效。原始套接字提供对底层网络协议的直接访问,允许开发者处理更底层的网络数据包。• 效率考量:数据会被发送到网络中的所有设备,即使某些设备不需要这些数据。• IPv6注意事项:IPv6不支持传统广播,而是使用组播替代。• 使用限制:多播地址只能用于目的地址,不能用于源地址。Linux网络编程:广播、组播与原始套接字。

2025-05-20 19:51:56 655

原创 深入理解Socket选项

级别的选项作用于套接字本身,与底层协议无关,是最常用的选项级别。• 设置后应使用getsockopt验证实际值(系统可能会调整)• 默认值通常为64(Linux)或128(Windows):设置接收/发送超时(struct timeval)• 对于高吞吐量应用,建议设置为64KB-256KB。• 适用场景:实时性要求高的应用(如游戏、远程桌面)• 启用时(默认):减少小包数量,提高网络利用率。• 默认启用Nagle算法(缓冲小包合并发送):设置接收/发送缓冲区大小(单位:字节)

2025-05-19 10:55:21 1093

原创 Linux I/O 多路复用:select、poll 和 epoll 详解

本文将详细介绍三种主要的 I/O 多路复用机制:select、poll 和 epoll,分析它们的工作原理、API 使用、示例代码以及各自的优缺点。epoll 是 Linux 特有的高性能 I/O 多路复用机制,解决了 select 和 poll 的性能瓶颈。select 是最早出现的 I/O 多路复用机制,它使用位图(fd_set)来表示文件描述符集合。poll 改进了 select 的一些限制,使用链表结构代替位图,没有最大文件描述符数量的限制。: 需要监控的文件描述符的最大值加 1。

2025-05-13 11:59:16 565

原创 IP协议、以太网包头及UNIX域套接字

4位首部长度(header length):以4字节为单位表示IP头长度,基础长度为20字节(5个单位),最大60字节。16位总长度(total length):IP报文(头+数据)的总长度。4位版本号(version):标识IP协议版本,IPv4值为4。16位标识(id):唯一标识主机发送的报文,分片报文id相同。8位生存时间(TTL):最大跳数,防路由循环,每经一跳减1。• 第2位:禁止分片(DF),置1时若报文超MTU则丢弃。• 第3位:更多分片(MF),分片时除最后一片外都置1。

2025-05-12 18:57:03 746

原创 TCP 与 UDP报文

在网络通信中,TCP(传输控制协议) 和 UDP(用户数据报协议) 是两种最核心的传输层协议。TCP 报文由 头部(Header) 和 数据(Data) 两部分组成,其头部固定为 20 字节(可扩展至 60 字节)。• 确认号(Ack)表示期望收到的下一个字节编号(如 Ack=X+1 表示已收到 X)。• 源/目标端口:标识通信的进程(与 IP 地址结合称为 套接字)。• 序列号(Seq)表示当前报文数据的起始编号。• 无连接:无需握手,直接发送数据。:发起连接(三次握手)。:关闭连接(四次挥手)。

2025-05-05 16:03:18 1505

原创 UDP 通信详解:`sendto` 和 `recvfrom` 的使用

UDP(User Datagram Protocol)是一种无连接、不可靠的传输层协议,适用于对实时性要求高但允许少量丢包的场景(如视频流、DNS 查询)。与 TCP 不同,UDP 不需要建立连接,直接通过。用于通过 UDP 套接字 发送数据。用于通过 UDP 套接字 接收数据。• 完整的服务器端和客户端代码示例。• 成功:返回实际发送的字节数。• UDP 通信的基本流程。• 成功:返回接收的字节数。

2025-05-03 13:18:16 726

原创 Linux网络编程:TCP多进程/多线程并发服务器详解

Linux网络编程:TCP多进程/多线程并发服务器详解在Linux网络编程中,TCP服务器主要有三种并发模型:本文将重点讲解多进程和多线程实现方式,并分析关键技术和常见问题。2.1 核心代码解析2.2 关键技术点• 允许服务器快速重启而不需要等待TIME_WAIT状态结束• 避免"Address already in use"错误• 子进程退出后会变成僵尸进程• 通过信号处理或显式wait/waitpid回收资源重要原则:只有当所有进程都关闭了文件描述符,内核才会真正释放资源。• 父进程需要关闭客户端

2025-04-28 16:53:50 808

原创 Linux Socket编程:从API到实战

• 流式套接字(SOCK_STREAM):提供面向连接的、可靠的数据传输服务(TCP): 套接字类型(SOCK_STREAM/SOCK_DGRAM/SOCK_RAW)• 数据报套接字(SOCK_DGRAM):提供无连接的服务(UDP): 协议族(AF_INET/AF_INET6/AF_UNIX)• 原始套接字(SOCK_RAW):允许对底层协议的直接访问。3.7 close()/shutdown() - 关闭连接。3.6 send()/recv() - 数据收发。3.1 socket() - 创建套接字。

2025-04-27 21:33:10 1104

原创 深入理解IP地址、端口号、字节序及其应用

在现代计算机网络中,IP地址、端口号和字节序等概念是网络通信的基础。了解这些概念不仅有助于理解网络协议的工作原理,还能帮助开发人员进行调试和优化程序。

2025-04-23 17:16:07 1091

原创 OSI 七层模型与 TCP/IP 协议栈详解

OSI 七层模型:是一种理论模型,强调每一层的独立性。它帮助我们理解网络协议如何相互协作和分层工作。TCP/IP 协议栈:更接近实际应用,是互联网通信的基础。它简化了层次结构,便于实现。五层模型:简化了 OSI 模型,适用于实际网络中的协议设计和应用。

2025-04-13 17:23:41 1394

原创 深入浅出:信号灯与系统V信号灯的实现与应用

P操作(sem_wait:请求资源,如果信号灯的值大于0,则成功获取资源并将信号灯值减1。如果信号灯值为0,则会阻塞,直到信号灯的值大于0为止。V操作(sem_post:释放资源,将信号灯值加1。如果有其他进程或线程正在等待该信号灯,则唤醒其中一个。这些操作通常用于解决临界区问题,确保同一时刻只有一个线程或进程能够访问共享资源。

2025-04-12 21:20:17 1193

原创 从零掌握Linux消息队列:原理详解与实战指南

从零掌握Linux消息队列:原理详解与实战指南。二、密钥生成:ftok函数深度解析。3.1 创建队列:msgget。3.2 发送消息:msgsnd。3.3 接收消息:msgrcv。3.4 队列管理:msgctl。四、实战:实现跨进程日志系统。6.1 其他IPC方式对比。一、为什么需要消息队列?1.1 进程间通信的挑战。1.2 消息队列的优势。2.1 函数原型与参数。三、消息队列核心操作。4.2 日志消息格式。4.3 关键实现代码。5.2 常见错误处理。

2025-04-06 16:49:58 967 1

原创 Linux信号处理解析:从入门到实战

2 | SIGINT | Ctrl+C | 终止进程 || 1 | SIGHUP | 终端断开 | 终止进程 || 15 | SIGTERM | 默认终止信号 | 优雅终止 || 僵尸进程堆积 | SIGCHLD+wait组合拳 |

2025-04-04 18:57:39 990

原创 内存映射与共享内存完全指南:从入门到实战

首次写入 | 15μs | 8μs || 修改10万次 | 110ms | 85ms || 相邻进程读取 | 22μs | 3μs || 操作 | mmap耗时 | 共享内存耗时 |三、System V共享内存实战:跨进程聊天室。(动态图示:文件内容如何映射到内存空间)四、mmap vs 共享内存:如何选择?(图示:两个进程通过共享内存通信)步骤2:进程A写入数据。

2025-04-02 20:01:57 1166

原创 Linux进程间通信:无名管道与有名管道的原理与实践

在多任务操作系统中,进程间通信(IPC)是实现协作的核心机制。三、有名管道(Named Pipe / FIFO):跨进程的公共通道。管道的本质:一种基于文件描述符的通信方式,实现数据流动的“桥梁”。二、无名管道(Anonymous Pipe):父子进程的私有通道。核心分类:无名管道(匿名管道)与有名管道(命名管道)。一、引言:为什么需要进程间通信(IPC)?四、无名管道 vs 有名管道:对比与选型。代码示例:父子进程通信。代码示例:双向通信实现。五、常见问题与调试技巧。非阻塞模式下的竞态条件。

2025-04-01 20:37:03 829

原创 多线程编程:线程池

线程池作为并发编程的基石技术,其设计需要在 资源效率、响应速度 和 系统稳定性 之间寻找平衡点。在传统多线程编程中,每次任务处理都需要经历 线程创建→任务执行→线程销毁 的完整生命周期。线程池的核心价值:通过 线程复用 和 任务队列缓冲,将系统资源利用率提升30%~70%(根据Intel实验数据)。三、代码深度解析(基于C/pthread实现)一、引言:为什么需要线程池?二、线程池的四大核心组件。五、应用场景与选型建议。四、线程池的进阶特性。

2025-03-31 17:04:26 1276

原创 多线程编程:条件变量

在多线程编程中,条件变量(Condition Variable) 是解决线程间同步与通信的核心工具之一。它允许线程在特定条件不满足时主动挂起,并在条件满足时被唤醒,从而避免了忙等待(Busy Waiting)带来的资源浪费。本文将从条件变量的初始化、核心函数原理、使用陷阱以及实际代码示例展开,深入解析这一机制的最佳实践。优点:无需手动销毁,程序退出时自动释放资源。四、代码示例解析:生产者-消费者模型。一、条件变量的初始化:静态与动态。三、条件变量的使用陷阱与解决方案。二、条件变量的核心操作。

2025-03-28 17:14:48 1024

原创 多线程编程:彻底搞懂互斥锁与死锁预防

【代码】多线程编程:彻底搞懂互斥锁与死锁预防。

2025-03-27 19:57:27 549

原创 POSIX 线程取消与资源清理完全指南

在多线程编程中,优雅地终止线程并确保资源释放是开发者面临的重要挑战。直接终止线程可能导致内存泄漏、文件未关闭等问题。POSIX 线程库提供了一套完整的线程取消和清理机制,本文将深入解析这些关键API的使用方法。

2025-03-27 19:50:29 570

原创 线程生命周期管理与分离状态

在多线程编程中,主线程的退出方式会直接影响子线程的行为,这是开发者必须清楚的关键知识点。

2025-03-26 16:37:41 1226

原创 多线程编程:线程私有与共享资源解析及线程操作函数详解

共享资源必须同步使用互斥锁、信号量或原子操作保护临界区。优先使用线程局部存储(TLS)替代全局变量以减少竞争。谨慎传递参数动态分配内存或复制数据避免悬垂指针。及时回收资源调用或设置分离属性防止资源泄漏。附录:完整代码示例5// 线程函数:动态分配参数内存free(arg);// 释放参数内存// 模拟任务执行// 返回结果// 创建线程并传递参数i++) {*arg = i;// 等待线程结束并收集结果i++) {

2025-03-26 16:32:29 1332

原创 深入理解 Linux 进程管理:进程组、会话、守护进程与关键系统调用

在 Linux 中,进程组是由一个父进程及其所有子进程组成的集合。每个进程组有一个唯一的进程组 ID(PGID),它通常与进程组长(组长进程,即父进程)的进程 ID(PID)相同。进程组为一组相关的进程提供了一个统一的管理单元。会话是多个进程组的集合,通常由一个用户登录后启动的所有进程组成。每个会话有一个唯一的会话 ID(SID),通常与会话首进程(例如,登录进程)的 PID 相同。会话的作用是方便管理和组织用户在登录期间启动的所有进程。控制终端是与会话关联的终端设备,用于输入输出。

2025-03-25 10:46:03 1209

原创 深入了解 Linux 的 exec 函数族与 system 函数

exec函数族包括execlexecvexecleexecpexecvpexecve等多个函数。所有这些函数的共同特点是:一旦执行成功,当前进程将被新程序替换,而不再返回原进程中。常见的exec。

2025-03-25 10:41:43 1036

原创 深入理解进程的创建、退出与回收机制

fork()

2025-03-24 11:34:09 351

原创 Linux系统中的进程基础

在Linux中,我们通常会涉及进程的创建、管理、优先级调整以及进程间的通信。本文将深入讲解Linux中的进程组成、管理、调度命令以及如何控制进程的优先级和状态。交互式进程是与用户直接交互的进程。这类进程需要快速响应用户的输入,通常具有较高的优先级,且执行时间较短。Linux允许将进程分为前台进程和后台进程,前台进程占用终端输入和输出,而后台进程则在后台运行。每个进程在操作系统中都有一个唯一的标识符—进程ID(PID)。在Linux中,进程的优先级控制其调度的顺序,使用。命令用于修改已经运行进程的优先级。

2025-03-24 11:27:52 916

原创 Linux系统编程:目录操作、文件权限与库管理

在Linux系统编程中,目录操作是常见的任务之一。

2025-03-23 20:21:32 1385

原创 Linux应用开发----文件io

文件的打开和关闭。

2025-03-18 10:25:40 647

原创 缓冲类型及printf的缓冲行为

流的缓冲类型。

2025-03-18 10:23:34 320

原创 shell命令(入门到精通)

echo “参数1: $1”return 0。

2025-03-17 14:19:32 1336 1

原创 Linux软件包管理(apt,dpkg等工具的使用)

软件包是将应用程序、配置文件、依赖关系等打包在一起的归档文件。在 Debian/Ubuntu 系统中,软件包通常是.deb格式。

2025-03-17 10:38:31 337

原创 Makefile(一文读懂)

定义变量$@: 当前目标$<: 第一个依赖文件$^: 所有依赖文件$*: 匹配符 % 匹配的部分$(@D): 目标文件的目录部分$(@F): 目标文件的文件部分。

2025-03-16 14:40:35 967 1

原创 GDB调试

在使用GDB调试之前,需要确保程序在编译时包含了调试信息。如果程序同时涉及多进程和多线程,可以结合上述方法。GDB 可以调试多线程程序,使用。命令可以对所有线程执行相同命令。

2025-03-14 10:21:55 296 1

原创 gcc编译器

【代码】Linux应用开发(四)---gcc编译器。

2025-03-14 10:12:30 228 1

原创 vi编辑器

进入编辑器过后输入i进入写模式,esc退出写模式。输入v模式进入可读行模式,esc退出该模式。:wq保存并推出, :q!用vi编辑器打开目标文件。

2025-03-11 11:29:24 139

原创 linux基础命令

这篇文章呢默认你已经安装好linux系统了,旨在教一些基础命令的基础用法用于快速上手Linux。

2025-03-11 11:18:15 770

原创 Linux文件类型

Linux应用开发(二)—文件类型。

2025-03-11 10:44:24 351 1

空空如也

空空如也

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

TA关注的人

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