- 博客(304)
- 资源 (1)
- 收藏
- 关注
原创 socketpair函数详解
socketpair()是Unix/Linux系统中用于创建一对已连接的匿名套接字的系统调用,专为进程间通信(IPC)设计。该函数创建的套接字对自动连接,无需绑定地址或手动连接,特别适用于父子进程或线程间通信。核心特性包括匿名连接、双向通信、高效IPC和无文件路径。主要使用场景包括父子进程通信、线程间通信以及替代单向的管道(pipe)。使用时需注意描述符关闭、协议族限制等事项,它比管道更灵活,支持双向通信和多种套接字类型,是亲缘进程间高效通信的理想选择。
2025-07-28 22:32:24
230
原创 EPOLLONESHOT 深度解析:Linux epoll 的单次触发机制
事件处理原子化:确保每个事件只被一个线程处理状态转换安全:防止在处理过程中被其他事件干扰简化并发模型:减少对传统锁机制的依赖graph TBA[添加EPOLLONESHOT] --> B[处理事件]B --> C{需要继续监听?C -->|是| D[epoll_ctl(MOD)]C -->|否| E[close(fd)]掌握 EPOLLONESHOT 的使用精髓,可以构建出既高性能又高可靠的网络服务系统,特别适用于金融交易系统、实时游戏服务器等高要求场景。
2025-07-27 21:45:37
548
原创 EPOLLET 边缘触发模式深度解析
EPOLLET边缘触发模式是Linux高性能网络编程的核心技术,与水平触发(EPOLLLT)相比,它仅在I/O状态变化时触发一次事件。摘要:1)ET模式本质是检测空→非空或满→非满的状态突变;2)必须循环读写直到EAGAIN,否则会丢失后续事件;3)写操作需动态管理EPOLLOUT监听;4)特殊场景需处理连接风暴和惊群效应;5)性能测试显示ET模式可减少系统调用30%以上,吞吐量提升8-10%。正确使用ET模式可构建百万级并发服务,但要求开发者严格遵循非阻塞I/O处理规范。
2025-07-27 21:31:34
474
原创 EPOLLIN事件的详细解析
摘要:EPOLLIN是Linux epoll机制的核心事件,用于监听文件描述符的可读状态。它在TCP/UDP socket、pipe等有数据可读时触发,需配合非阻塞I/O使用。关键注意事项包括:边缘触发(ET)模式需循环读取至EAGAIN;需监听EPOLLERR/EPOLLHUP错误事件;与EPOLLRDHUP配合检测连接关闭。典型应用场景包括高性能网络服务,正确处理可避免数据丢失和性能问题。掌握EPOLLIN的使用是开发高并发服务的基础。
2025-07-27 21:24:40
656
原创 Epoll事件EPOLLRDHUP详解
摘要:EPOLLRDHUP是Linux特有的epoll事件(内核≥2.6.17),用于高效检测TCP连接关闭。当对端发送FIN包时触发,无需读取数据即可直接处理断开,比EPOLLIN更高效。使用时需在epoll_ctl中注册该标志,并在事件循环中检查。典型场景包括服务器释放资源、避免阻塞读取等。需注意其Linux专有性,且不适用于半关闭(需结合EPOLLIN)。该机制显著提升高并发系统的连接管理效率。
2025-07-27 21:02:41
616
原创 setnonblocking函数用途和使用案例
setnonblocking 函数摘要 setnonblocking 是将文件描述符设置为非阻塞模式的核心函数,通过 fcntl 系统调用添加 O_NONBLOCK 标志实现。在非阻塞模式下,I/O 操作不会阻塞线程,而是立即返回,使程序能够高效处理多并发连接。该技术广泛应用于高性能服务器(如 Nginx、Redis),需配合事件驱动模型(epoll/kqueue)使用,正确处理 EAGAIN/EWOULDBLOCK 错误。关键应用场景包括非阻塞 accept、读写处理和连接管理,能显著提升服务器吞吐量,但
2025-07-27 20:53:55
557
原创 epoll_event 事件类型详解
本文详细解析了Linux epoll机制中的epoll_event事件类型,包括核心事件(EPOLLIN/OUT/RDHUP)和高级特性(EPOLLET/ONESHOT/EXCLUSIVE)。通过对比水平触发与边缘触发模式,分析各事件的触发条件和典型应用场景,如TCP服务器监听、数据收发等。文章提供了实用的代码示例和事件组合建议,帮助开发者高效使用epoll进行I/O多路复用编程。
2025-07-27 17:28:32
557
原创 listen() 函数详解
listen() 是 TCP 服务器编程的核心函数,用于将套接字设为监听状态,准备接受客户端连接。它在 bind() 之后调用,参数包括套接字描述符和等待队列长度 backlog。实际队列长度取 backlog 和系统参数 somaxconn 的最小值。使用时要遵循 socket()→bind()→listen()→accept() 的流程,并注意错误处理和 backlog 的合理设置(通常5-10用于轻负载,1000+用于高并发)。listen() 会创建SYN队列(半连接)和Accept队列(全连接),
2025-07-27 16:49:43
685
原创 sockaddr_in 结构体详解
sockaddr_in是网络编程中表示IPv4地址的核心结构体,包含地址族(AF_INET)、端口号(网络字节序)、IP地址(网络字节序)和填充字段。使用时需注意字节序转换(htons/ntohs)和结构体清零。它与通用sockaddr结构体兼容,在函数调用时需要强制转换。典型应用包括服务器绑定(INADDR_ANY)和客户端连接(inet_pton转换IP)。配套的地址转换函数(inet_addr/ntoa或更安全的inet_pton/ntop)简化了IP处理。正确理解和使用sockaddr_in对开发网
2025-07-27 16:31:58
266
原创 setsockopt函数概念和使用案例
setsockopt()函数详解:关键选项与典型应用场景 摘要: setsockopt()是用于配置套接字参数的核心系统调用,通过不同协议层(SOL_SOCKET/IPPROTO_TCP/IPPROTO_IP等)提供丰富的网络控制选项。主要功能包括:地址重用(SO_REUSEADDR)、TCP特性调节(TCP_NODELAY/TCP_KEEPIDLE)、缓冲区设置(SO_RCVBUF)、超时控制(SO_RCVTIMEO)等。典型应用场景如服务快速重启(SO_REUSEADDR)、低延迟通信(禁用Nagle算
2025-07-26 22:58:24
717
原创 window上建立git远程仓库
本文详细介绍了在Windows系统上搭建Git远程仓库的三种方法:1)通过文件共享创建裸仓库,适合局域网快速共享;2)使用SSH协议实现安全传输;3)安装Gitea搭建功能完整的代码托管平台。文章提供了每种方法的详细配置步骤,包括安装设置、权限管理和防火墙配置,并给出了优化建议(如IP固定、备份方案)。对于大多数Windows用户,推荐使用文件共享方案作为最简单直接的解决方式,而需要安全传输或完整功能时可选择SSH或Gitea方案。全文包含具体命令和配置说明,便于用户快速部署Git远程仓库。
2025-07-26 16:21:19
792
原创 epoll_ctl函数的概念和使用案例
epoll_ctl 是 Linux 中管理 epoll 实例的核心函数,用于添加、修改或移除监控的文件描述符。本文详细解析其参数、返回值,并提供一个完整的 TCP 服务器实现案例。案例演示了如何使用 EPOLL_CTL_ADD 添加监听套接字、EPOLL_CTL_DEL 移除断开连接,以及 EPOLL_CTL_MOD 动态修改事件类型(如从可读切换到可写)。通过边缘触发模式(EPOLLET)和非阻塞 I/O 的高效组合,展示了 epoll 在高并发场景下的优势,包括连接管理、错误处理和事件驱动的数据读写机制
2025-07-26 11:54:00
866
原创 epoll_create1函数含义和使用案例
epoll_create1是Linux中创建epoll实例的核心函数,相比已废弃的epoll_create,它支持EPOLL_CLOEXEC标志,避免exec时文件描述符泄漏。该函数返回epoll文件描述符,失败时返回-1。典型使用场景包括高性能服务器开发,需配合epoll_ctl和epoll_wait实现I/O多路复用。关键注意事项包括:资源管理(及时关闭fd)、错误检查、线程安全以及监控数量限制。现代Linux服务器开发中,epoll_create1(EPOLL_CLOEXEC)是创建epoll实例的推
2025-07-26 10:29:45
565
原创 epoll_wait函数的概念和使用案例
epoll_wait是Linux高效I/O多路复用的核心函数,相比select/poll性能更优。其原型为int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout),参数包括epoll实例描述符、事件数组、最大事件数和超时时间。本文详细解析了各参数含义,并提供了完整的高性能TCP服务器实现案例,展示了如何创建epoll实例、添加监听套接字、处理新连接和客户端数据,特别说明了边缘触发模式(ET)下的关键处理逻
2025-07-26 10:24:24
269
原创 I/O多路复用机制中触发机制详细解析
I/O多路复用触发机制主要分为水平触发(LT)和边缘触发(ET)两种模式。LT模式会持续通知就绪状态,直到数据被处理,编程简单但系统调用开销大;ET模式仅在状态变化时通知一次,必须使用非阻塞I/O并循环处理数据到EAGAIN,性能更高但实现复杂。LT适合通用场景,ET适用于高并发服务器。各平台实现存在差异,Linux的epoll支持两种模式,而Windows的IOCP本质是完成端口模式。最佳实践建议在Linux高并发服务中使用EPOLLET+非阻塞I/O,可显著提升吞吐量。
2025-07-25 22:48:33
607
原创 epoll_event数据结构及使用案例详解
摘要: epoll_event是Linux中epoll机制的核心数据结构,用于描述文件描述符上的事件及关联数据。其包含events(事件掩码,如EPOLLIN、EPOLLET等)和data(用户数据联合体,支持存储fd或自定义指针)。典型应用如边缘触发(ET)模式的Echo服务器:通过epoll_ctl注册非阻塞fd及事件类型,epoll_wait获取就绪事件后,需循环读写至EAGAIN。关键技巧包括使用data.ptr存储连接上下文、组合事件类型及选择ET模式提升性能。该结构结合非阻塞I/O可实现高并发网
2025-07-25 22:34:13
1012
原创 C++ std::list概念与使用案例
std::list是C++ STL中的双向链表容器,具有非连续内存存储特性。核心优势包括O(1)时间复杂度的任意位置插入删除、稳定迭代器(除被删元素外)以及专用排序/合并操作。与vector对比,list在频繁插入删除场景性能更优,但随机访问效率较低(O(n))。典型应用场景包括需要频繁修改的订单管理系统等,通过push_back/pop_front等操作高效维护数据,并支持splice、merge等链表特有功能。注意每个元素有额外指针开销,适合元素较大或需要稳定迭代器的场景。
2025-07-23 22:26:09
348
原创 C++ new 创建数组的内在原理详解
C++中new[]创建数组时,会分配额外内存存储数组大小并顺序构造元素,返回第一个元素的指针。delete[]通过指针偏移读取大小并逆序析构元素。必须严格配对使用,否则会导致内存问题。不同编译器实现存在差异,建议优先使用标准容器或智能指针。new[]/delete[]与malloc/free的关键区别在于会自动处理构造/析构和类型安全。典型错误包括错误释放方式和跨模块内存管理,最佳实践是使用标准库容器和智能指针来避免这些问题。
2025-07-22 21:23:11
367
原创 C++ 模板库map数据结构的概念和使用案例
C++中的std::map是STL提供的关联容器,基于红黑树实现,存储键值对并自动按键排序。核心特性包括有序性、键唯一性、O(log n)操作复杂度等。常用操作有插入、查找、删除和遍历,但需注意operator[]可能意外插入新键。适用于需要有序键值对的场景,如字典、缓存等。使用时可根据需求自定义排序规则或选择unordered_map提升性能。通过学生成绩管理案例,展示了std::map的基本用法和注意事项。
2025-07-22 20:55:59
510
原创 MYSQL、MYSQL_RES和 MYSQL_FIELD的含义与使用案例
MySQL C API 的核心数据结构包括:MYSQL(数据库连接句柄,用于建立和管理连接)、MYSQL_RES(查询结果集,存储SELECT等操作返回的数据)和MYSQL_FIELD(字段元数据,描述结果集的列结构)。三者协同工作:通过MYSQL执行查询后,MYSQL_RES包含实际数据行和关联的MYSQL_FIELD数组(字段定义)。使用时需注意资源释放(mysql_free_result()、mysql_close()),正确处理二进制数据和空值。示例代码展示了从连接到结果处理的完整流程,包括获取字段
2025-07-20 21:16:03
926
原创 linux安装Mysql后添加mysql的用户和密码
本文提供了MySQL用户管理的完整指南,包括两种创建用户的方法(推荐使用CREATE USER语句),详细的操作步骤从登录到验证用户,以及修改密码的多种方式。还介绍了用户管理常用命令和安全最佳实践,如使用强密码、最小权限原则、限制访问来源等。最后包含连接测试方法,并提示远程连接需配置相关设置。适用于MySQL各版本管理员进行安全的用户权限管理。
2025-07-20 17:01:22
250
原创 fclose 函数的概念和使用案例
摘要: fclose 函数是 C 语言中用于关闭文件的关键函数,主要功能包括刷新缓冲区数据到磁盘、释放内存和系统资源。其核心作用是确保数据完整性(避免写入丢失)和防止资源泄漏。使用时应与 fopen 配对,并在写入操作后及时调用以强制数据落盘。典型场景包括:写入文件后保存数据、读取后释放资源、错误处理时防止泄漏,以及自动删除临时文件(tmpfile)。最佳实践包括检查返回值、避免重复关闭、在作用域结束前关闭文件。fclose 是 C 程序健壮性的重要保障,需严格遵循"有开有关"原则。 (
2025-07-19 15:48:46
972
原创 pthread_mutex_unlock函数的概念和用法
pthread_mutex_unlock是POSIX线程库中用于解锁互斥锁的关键函数。它必须与pthread_mutex_lock配对使用,由加锁线程在完成共享资源访问后释放锁,允许其他线程获取。解锁操作需放在临界区代码之后,并确保所有执行路径都能解锁。错误使用可能导致死锁或程序崩溃。示例展示了如何通过加锁/解锁保护共享计数器,防止数据竞争。该函数是确保多线程程序正确同步的核心机制,需严格遵循"谁加锁谁解锁"原则。
2025-07-13 22:19:44
829
原创 github gitclone代码时如果没权限怎么办
在 GitHub 上部署拉取远程分支时,涉及的账号和密码(或认证方式)主要与代码仓库的访问权限相关。通过以上方式,可高效、安全地完成 GitHub 远程分支的拉取操作。按提示完成生成(可直接回车使用默认设置)。
2025-06-24 22:55:56
689
原创 GitHub Actions 的深度解析与概念介绍
GitHub Actions是GitHub提供的自动化工作流引擎,通过事件驱动机制实现软件开发流程的自动化。其核心架构包含四个要素:工作流(YAML文件)、触发事件(如代码提交或Issue创建)、并行执行的任务以及原子化操作步骤。关键技术组件包括可复用Actions、执行环境Runners、文件共享Artifacts和安全存储Secrets。GitHub Actions支持从持续集成到部署的全流程自动化,具有生态集成优势、多环境测试能力和成本效益。典型应用包括CI/CD流水线和仓库运维自动化,其发展历程体现
2025-06-24 21:32:13
850
原创 docker镜像中集成act工具
该Dockerfile基于Ubuntu 22.04构建,用于安装GitHub Actions本地运行工具act。主要步骤包括:安装系统依赖(curl/git/gcc等)、下载指定版本的act二进制文件并安装到系统路径、最后验证安装。通过ARG管理版本号便于升级,使用命令合并减少镜像层数,并清理临时文件优化镜像大小。还提供了构建建议和扩展优化项(时区设置/非root用户/工作目录),体现了良好的Docker实践。
2025-06-23 22:12:20
330
原创 Docker 永久换源步骤
本文介绍了Docker永久更换镜像源的详细步骤:1)创建/etc/docker目录;2)通过tee命令写入包含多个国内镜像源的daemon.json配置文件;3)重启Docker服务使配置生效;4)通过拉取测试镜像验证配置。技术要点包括配置文件的EOF写入方式和多镜像源的自动轮询机制。优化建议保留2-3个稳定源,推荐DaoCloud等国内镜像,并提供配置验证和故障排查命令。注意生产环境应优先使用知名云厂商的专属加速地址以确保稳定性。
2025-06-23 21:57:59
597
原创 使用 catthehacker/ubuntu Docker 镜像部署 GitHub Actions 本地运行环境
catthehacker/ubuntu Docker 镜像提供了本地运行 GitHub Actions 工作流的完整解决方案。该镜像提供多个版本选项,从轻量级(1.2GB)到包含完整工具链(3.5GB)的版本。部署流程简单,只需拉取镜像并设置别名即可使用。文章详细介绍了镜像使用方法、工作流示例、性能优化技巧和常见问题解决方案,包括Node.js/Python项目构建、资源限制配置以及跨平台支持等。还提供了镜像定制开发指南和最佳实践,如持久化配置、网络优化和定期更新策略。这套方案能显著提升本地开发和测试Gi
2025-06-23 21:33:25
527
原创 验证linux多进程时间片切换的程序
在同时运行一个或多个一味消耗 CPU 时间执行处理的进程时,采集以下统计信息。 ・在某一时间点运行在逻辑 CPU 上的进程是哪一个 ・每个进程的运行进度通过分析这些信息,来确认本章开头对调度器的描述是否正确。实验程序的设计如下。 1) 命令行参数 ・第 1 个参数(n):同时运行的进程数量 ・第 2 个参数(total):程序运行的总时长(单位:毫秒) ・第 3 个参数(resol):采集统计信息的间隔(单位:毫秒)
2025-03-29 23:03:04
294
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人