
Linux
文章平均质量分 93
浅慕Antonio
分享编程知识
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【Linux】mmap的介绍和使用
`mmap` (Memory Map) 是一种将文件或设备映射到内存的系统调用,允许应用程序直接通过内存地址访问文件数据,无需使用 `read`/`write` 等系统调用原创 2025-07-19 21:36:45 · 805 阅读 · 0 评论 -
【Linux】Linux异步IO-io_uring
io_uring是Linux内核5.1引入的高效异步I/O框架,通过双环形队列(提交队列SQ和完成队列CQ)实现用户态与内核态的零拷贝通信。推荐使用5.8+内核以获取完整功能。开发时通常通过liburing库简化操作,避免直接调用底层系统调用。SQ用于提交I/O请求,CQ用于接收结果,两者通过mmap共享内存实现高效交互。配置参数如IORING_SETUP_SQPOLL可启用轮询模式提升性能。典型使用流程包括初始化队列、提交请求、处理完成事件等步骤,liburing提供了io_uring_queue_ini原创 2025-07-18 19:46:26 · 645 阅读 · 0 评论 -
【Linux】Linux权限管理
本文介绍了Linux系统中的Shell命令和权限管理机制。Shell作为命令行解释器,将用户指令传递给内核并返回结果,常见如bash。Linux权限分为超级用户(root)和普通用户,通过su/sudo实现切换和权限提升。文件权限针对三类用户(拥有者、组、其他)设置rwx(读写执行)权限,可使用chmod命令修改。权限管理通过限制用户访问范围来保障系统安全,是Linux多用户环境的重要特性。原创 2025-06-18 17:42:52 · 776 阅读 · 0 评论 -
【Linux】Linux静态库和动态库基础
静态库与动态库的概念及使用流程 静态库在编译阶段嵌入可执行文件,生成独立程序,文件后缀为.a。优点包括独立性强、启动速度快,缺点是体积大且更新麻烦。动态库则在运行时加载,后缀为.so,具有体积小、更新方便的优点,但依赖环境且启动稍慢。 静态库制作流程:1) 编译源文件为.o;2) 用ar工具打包为.a文件;3) 发布库文件和头文件。使用时需指定头文件路径(-I)和库路径(-L)。动态库制作类似,但需-fPIC编译,使用ldconfig或环境变量配置路径。 关键区别: 静态库:编译时链接,独立性强 动态库:运原创 2025-06-18 00:50:20 · 1279 阅读 · 0 评论 -
【Linux】Linux 线程池基础
本文介绍了线程池的概念、优点和应用场景,并实现了一个简单的线程池。线程池通过预先创建一定数量的线程,避免了频繁创建销毁线程的开销,提高了系统性能。其优点包括快速响应任务、防止系统过载和资源占用较少。线程池适用于短时任务量大或对性能要求高的场景。文章通过C++代码实现了线程池的核心功能,包括任务队列管理、线程同步机制等,并展示了线程池处理数学计算任务的运行效果。该实现使用了互斥锁和条件变量确保线程安全,通过模板设计提高了代码复用性。原创 2025-06-17 16:09:21 · 720 阅读 · 0 评论 -
【Linux】Linux异步I/O -libaio
libaio是Linux内核提供的异步I/O库,通过io_submit提交请求后立即返回,内核通过完成队列通知结果。其核心特性包括零拷贝(结合O_DIRECT绕过内核缓冲区)和批量处理。使用O_DIRECT时需注意数据对齐要求,适合数据库等大文件连续I/O场景。主要API包括:io_setup创建上下文、io_submit提交请求、io_getevents获取完成事件,以及io_prep_pread/pwrite准备读写请求。libaio通过异步机制显著提升I/O性能,特别适合高并发存储应用。原创 2025-06-17 13:14:20 · 1239 阅读 · 0 评论 -
【Linux】Linux异步I/O- POSIX glibc
本文介绍了异步I/O的概念及其实现方式。异步I/O允许应用程序发起请求后立即返回,由系统后台处理IO操作,完成后通过回调或信号通知,相比同步I/O具有高并发和资源利用率优势。文章重点分析了glibc对POSIX AIO标准的实现,包括关键函数如aio_read、aio_write等,以及核心数据结构aiocb和sigevent。glibc通过线程池模拟异步I/O,本质仍是多线程同步I/O,性能较低。文章还对比了Linux系统中不同的异步I/O实现方案(如libaio、io_uring)及其他操作系统的异步接原创 2025-06-16 21:03:40 · 1085 阅读 · 0 评论 -
【Linux】Linux 信号驱动I/O
信号驱动I/O是一种同步I/O模型,通过内核发送SIGIO信号通知进程文件描述符就绪,实现非阻塞的事件通知。其核心流程包括:注册兴趣和信号处理函数、异步通知、事件处理。虽然通知阶段是非阻塞的,但数据拷贝阶段仍需阻塞式系统调用,因此本质上属于同步I/O。实现时需通过fcntl设置O_ASYNC标志和进程属主,并使用sigaction注册SIGIO处理函数。示例代码展示了基于信号驱动的TCP服务端实现,其中listen_fd设置为信号驱动模式,新连接到来时会触发信号处理函数进行accept操作。该模型适合需要高原创 2025-06-15 16:52:35 · 861 阅读 · 0 评论 -
【Linux】Linux多路复用-epoll
epoll是Linux高效I/O多路复用机制,通过epoll_create创建内核事件表(含红黑树和就绪队列),epoll_ctl注册/修改/删除监控事件,epoll_wait获取就绪事件。其核心优势在于:1)红黑树存储监控的FD,增删改查高效;2)回调机制将就绪事件自动加入就绪队列;3)仅返回就绪事件,避免遍历所有FD。相比select/poll,epoll更适合高并发场景,是高性能服务器的关键技术。原创 2025-06-14 17:53:38 · 779 阅读 · 0 评论 -
【Linux】Linux多路复用-poll
摘要 Poll是Unix/Linux系统中的多路IO复用机制,用于监控多个文件描述符的状态变化(可读、可写等)。它通过pollfd结构体(包含fd、events、revents)管理文件描述符。核心函数poll(fds[], nfds, timeout)可设置超时时间并返回就绪的fd数量。Poll服务器的工作流程包括:创建监听套接字、初始化pollfd数组、持续检测事件(新连接或数据读取)、处理就绪事件(accept新连接或读取数据)。相较于select,poll不需要每次重新设置fd,提高了效率。文章还提原创 2025-06-14 14:26:41 · 1031 阅读 · 0 评论 -
【Linux】Linux 多路复用-select
摘要:多路复用技术(如select)允许单线程高效监控多个I/O通道,解决了传统网络编程中多线程资源消耗大或轮询浪费CPU的问题。select通过内核监控文件描述符集合,在事件发生时通知程序处理。其工作流程包括设置描述符集合、调用select等待事件、处理就绪事件并更新集合。文章详细解析了select函数参数、文件描述符就绪条件,并提供了基于select的服务器实现思路。该技术显著提升了网络服务器的并发处理能力,适合高负载场景。原创 2025-06-14 00:17:57 · 1001 阅读 · 0 评论 -
【Linux】Linux磁盘与链接
磁盘存储与管理是计算机系统的重要组成部分。本文介绍了磁盘的基本结构、分区与格式化原理,以及Linux系统中的文件管理机制。 磁盘由多个同心圆磁道组成,数据以扇区为单位存储。为便于管理,磁盘被分区并格式化为Block Group结构,包含超级块、块组描述符、inode位图和数据区等组件。每个文件通过唯一的inode编号标识,存储属性和数据块位置信息。 软硬链接是Linux文件系统的特色功能。软链接类似快捷方式,存储目标文件路径,可以跨文件系统;硬链接则共享inode节点,删除源文件后数据仍可访问。通过stat原创 2025-06-13 01:34:12 · 773 阅读 · 0 评论 -
【Linux】Linux基础I/O
本文介绍了C语言和系统文件I/O操作的基本接口。C语言提供了fopen、fclose、fwrite等系列函数进行文件读写,并以二进制或文本形式操作数据。系统调用层面则通过open、close、write、read等函数实现底层文件操作,其中open返回的文件描述符从3开始依次递增。文章通过具体代码示例,演示了如何创建文件、读写内容以及关闭文件,并解释了文件描述符与标准输入输出的关系,说明用户程序必须通过操作系统才能访问硬件文件。原创 2025-06-12 12:03:13 · 1202 阅读 · 0 评论 -
【Linux】Linux高级I/O
五种I/O模型浅析 摘要:本文介绍五种常见的I/O模型,包括阻塞式I/O、非阻塞式I/O、I/O复用、信号驱动式I/O和异步I/O。I/O操作分两个阶段:等待数据就绪和数据拷贝。阻塞式I/O简单但资源利用率低;非阻塞式I/O通过轮询避免阻塞;I/O复用(如select/epoll)高效处理多连接;信号驱动式I/O通过信号通知事件就绪;异步I/O完全非阻塞。不同模型适用于不同场景,高并发推荐I/O复用,简单任务可用阻塞式I/O。理解这些模型有助于优化网络编程性能。(150字)原创 2025-06-11 18:14:07 · 1277 阅读 · 0 评论 -
【Linux】Makefile基础
Makefile是自动化构建C/C++项目的工具,通过定义规则管理编译过程。其核心由目标、依赖和命令组成,基本语法为target: dependencies [tab] command。工作原理是根据文件时间戳判断是否需要重建目标。支持变量定义(如CC=g++)和内置变量($@表示目标文件名)。伪目标(.PHONY)用于执行非文件操作(如clean)。示例展示了从直接编译到使用变量、模式匹配的进阶写法,最终提供一个完整的Makefile模板,包含编译器设置、源文件列表和目标生成规则,实现自动化构建可执行程序原创 2025-06-11 16:42:39 · 1095 阅读 · 0 评论 -
【Linux】进程间通讯-消息队列
消息队列是一种进程间通信机制,本质上是内核提供的链表数据结构。发送进程向队列插入消息节点,接收进程则删除节点读取数据。消息结构包含类型标识符(mtype)和正文(mtext),大小受系统限制(MSGMAX/MSGMNB)。关键操作包括:msgget创建队列、msgsnd发送数据、msgrcv接收数据、msgctl控制队列。使用时需定义消息缓冲区结构,通过msgtype区分消息类型。生产者-消费者模式中,双方需约定相同的IPCKEY标识队列。示例代码展示了队列创建、消息发送/接收及队列删除的完整流程,可通过i原创 2025-06-09 16:09:30 · 892 阅读 · 0 评论 -
【Linux】Linux进程间通讯-信号
函数功能:设置某一信号的对应动作参数说明:第一个参数signum:指明了所要处理的信号类型,它可以取除了SIGKILL(9号信号)和SIGSTOP(19号信号)外的任何一种信号。第二个参数handle关联动作含义SIG_DFL执行该信号的默认处理动作SIG_IGN忽略该信号提供一个信号处理函数,要求内核在处理该信号时切换到用户态执行这个处理函数,这种方式称为捕捉(catch)一个信号signal函数可以自定义回调函数,来处理特定的信号这里我们自定义的回调函数,然后打印对应的信号。原创 2025-06-09 00:39:02 · 736 阅读 · 0 评论 -
【Linux】Linux进程间通讯-共享内存
要使用一块共享内存,进程必须首先分配它。随后需要访问这个共享内存块的每一个进程都必须将这个共享内存绑定到自己的地址空间中。在 Linux 系统中,每个进程的虚拟内存是被分为许多页面的。这些内存页面中包含了实际的数据。每个进程都会维护一个从内存地址到虚拟内存页面之间的映射关系。尽管每个进程都有自己的内存地址,不同的进程可以同时将同一个内存页面映射到自己的地址空间中,从而达到共享内存的目的。分配一个新的共享内存块会创建新的内存页面。原创 2025-06-07 15:06:48 · 1054 阅读 · 0 评论 -
【Linux】Linux 进程间通讯-管道
进程间通信(IPC)是实现不同进程间数据共享和同步的重要手段。文章介绍了IPC的基本概念、目的和分类,重点讲解了匿名管道的实现原理和使用方法。管道通过内核缓冲区实现单向数据传输,适用于父子进程通信,具有流式传输、同步互斥等特点。示例代码展示了如何使用pipe和fork函数建立父子进程间的管道通信,并分析了字节流通信的特性。管道通信随进程退出而释放,需注意读写端的关闭时机和双向通信的建立方式。原创 2025-06-06 23:51:06 · 1395 阅读 · 0 评论 -
【Linux】 Linux 进程控制
摘要: 本文详细介绍了Linux进程管理中的关键概念和操作。主要内容包括: 进程创建:重点讲解fork()函数的工作原理、返回值机制和写时拷贝技术,分析父子进程的执行流程。 进程终止:阐述进程退出的三种场景,介绍退出码的作用及查询方法,对比return、exit()和_exit()三种退出方式的区别。 进程等待:说明父进程等待子进程的必要性,演示wait()和waitpid()两种等待方法的使用,展示如何防止僵尸进程的产生。 文章通过代码示例和运行结果直观展示了进程创建、终止和等待的全过程,并提供了监控进程原创 2025-06-05 23:42:22 · 1158 阅读 · 0 评论 -
【Linux】Linux 环境变量
每个程序都会收到一张环境表,环境表是一个字符指针数组,每个指针指向一个以’\0’结尾的环境字符串。原创 2025-06-04 19:20:27 · 1186 阅读 · 0 评论 -
【Linux】Linux程序地址基础
本文深入探讨了程序地址空间与进程虚拟地址空间的区别。通过代码实验验证了程序地址空间的组成结构,包括代码区、字符常量区、已/未初始化区、堆区和栈区的内存分布特点。重点分析了进程虚拟地址空间的实现机制,指出每个进程通过独立的mm_struct结构体维护虚拟地址映射,并通过页表转换为物理地址。文章解释了父子进程共享相同虚拟地址但可能指向不同物理地址的现象,介绍了写时拷贝技术对性能的优化作用。最后强调了虚拟地址空间机制对进程隔离和内存保护的重要性。(150字)原创 2025-06-04 14:48:25 · 861 阅读 · 0 评论 -
【Linux】Linux 进程基础
在时间片轮转调度算法中,系统根据先来先服务的原则,将所有的就绪进程排成一个就绪队列,并且每隔一段时间产生一次中断,激活系统中的进程调度程序,完成一次处理机调度,把处理机分配给就绪队列队首进程,让其执行指令。从上述的结果可以看出,main函数的进程和fork创建的进程打印的结果是一样的,并且通过pid和ppid发现,fork的父进程就是main函数的进程,说明fork所创建出来的子进程和父进程在内存上映射。进程的退出状态必须被维持下去,因为他要告诉关心它的进程(父进程),你交给我的任务,我办的怎么样了。原创 2025-06-03 22:56:08 · 1100 阅读 · 0 评论 -
【Linux】pthread多线程同步
线程同步与互斥锁机制 本文介绍了线程同步的核心概念和互斥锁的应用。线程共享全局变量时可能引发数据安全问题,临界区的原子操作需要通过同步机制保证。互斥锁(mutex)是最常用的同步工具,通过锁定和解锁操作确保同一时间只有一个线程访问共享资源。文章详细解析了互斥锁的5个关键API函数:初始化(pthread_mutex_init)、加锁(pthread_mutex_lock/pthread_mutex_trylock)、解锁(pthread_mutex_unlock)和销毁(pthread_mutex_dest原创 2025-06-03 01:00:27 · 879 阅读 · 0 评论 -
【Linux】pthread多线程基础
线程概述与创建 线程是轻量级进程,允许应用程序并发执行多个任务。一个进程包含多个线程,所有线程共享全局内存区域(如数据段、堆内存),但拥有独立的栈空间。线程比进程创建更快,资源消耗更少,适合高效并发处理。在Linux中,线程本质仍是进程,可通过ps -Lf pid查看线程ID。 线程与进程的主要区别在于: 资源共享:线程共享内存,通信更便捷;进程需通过IPC机制。 创建开销:线程创建无需复制内存和页表,速度更快。 创建线程使用pthread_create(),需指定线程函数和参数。线程终止方式包括:主动调用原创 2025-06-02 20:36:51 · 989 阅读 · 0 评论 -
【Linux】上传、下载、压缩、解压
我们可以通过FinalShell工具,方便的和虚拟机进行数据交换。FinalShell界面自带的文件系统可以将虚拟机Linux中的文件下载到Windows上右击选择的文件。原创 2025-01-07 23:56:28 · 1844 阅读 · 0 评论 -
【Linux】Linux基础命令(二)
可以使用whereis 来查找程序二进制可执行文件、源代码文件和使用手册页存放的位置,比如查找find命令。这个命令实际上是调用一个less命令,因此可以对输出的结果进行翻页、查找等功能。less命令和more命令类似,都是查看文件内容,但less命令更强大。有时候只需要知道个大概的用法即可,这时可以可以使用whatis命令。使用man命令可以查看某个命令的帮助信息,比如。使用uname命令可以查看当前系统的版本信息。使用whoami可以查看当前系统的用户是谁。如果想要关闭,可以使用ctrl+c关闭。原创 2025-01-11 17:11:38 · 749 阅读 · 0 评论 -
【Linux】Linux软件包管理
deb格式的安装包通常用于Ubuntu操作系统,可以通过dpkg命令安装deb文件我们当前目录下有一个QQ音乐的.deb安装包,我们通过dpkg命令安装一下安装完成后,可以使用下面的命令启动QQ音乐qqmusic。原创 2025-01-11 20:44:42 · 1213 阅读 · 0 评论 -
【Linux】环境变量
环境变量是操作系统(Windows、Linux、Mac)在运行的时候,记录的一些关键性信息,用以辅助系统运行。在Linux系统中执行:env命令即可查看当前系统中记录的环境变量env环境变量是一种KeyValue型结构,即名称和值,如下图:图中记录了:HOME:/home/liuhang,用户的HOME路径USER:liuhang,当前的操作用户PWD:当前工作路径等等一系列信息,用于辅助系统在运行的时候从环境变量中获取关键信息。原创 2025-01-07 22:28:05 · 1587 阅读 · 0 评论 -
【Linux】IP地址、主机名、网络传输、进程管理、主机状态
可以通过命令:ifconfig,查看本机的ip地址ifconfig其中,这里的192.168.80.128就是当前虚拟机的IP。原创 2025-01-06 23:59:57 · 1330 阅读 · 2 评论 -
【Linux】Linux指令apt、systemctl、软链接、日期时区
Linux系统很多软件(内置或第三方)均支持使用systemctl命令控制:启动、停止、开机自启。NTP(Network Time Protocol)是一个用于同步计算机时间的协议,它内置了服务。在系统中创建软链接,可以将文件、文件夹链接到其它位置,类似Windows系统中的《快捷方式》sshd,ssh服务(FinalShell远程登录Linux使用的就是这个服务)除了内置的服务以外,部分第三方软件安装后也可以以systemctl进行控制。能够被systemctl管理的软件,一般也称之为:服务。原创 2025-01-04 17:28:33 · 439 阅读 · 0 评论 -
【Linux】Linux常用快捷键
Linux某些程序的运行,如果想要强制停止它,可以使用快捷键ctrl + c其中tail命令用于监听,会阻塞当前命令行。原创 2025-01-04 16:42:26 · 462 阅读 · 0 评论 -
【Linux】用户和权限
无论是Windows、MacOS、Linux均采用多用户的管理模式进行权限管理。在Linux系统中,拥有最大权限的账户名为:root(超级管理员)root用户拥有最大的系统操作权限,而普通用户在许多地方的权限是受限的。比如我们尝试在根目录下创建一个文件夹:切换到root用户后,发现就可以创建成功。原创 2024-12-29 15:07:40 · 1692 阅读 · 0 评论 -
【Linux】vi/vim编辑器简单介绍
vi\vim是visual interface的简称, 是Linux中最经典的文本编辑器同图形化界面中的 文本编辑器一样,vi是命令行下对文本文件进行编辑的绝佳选择。原创 2024-12-03 11:34:34 · 632 阅读 · 0 评论 -
【Linux】Linux基础命令入门
ls命令的作用是列出目录下的内容,语法:ls [-a -l -h][Linux路径]Linux系统的命令行终端,在启动的时候,默认会加载:当前登录用户的HOME目录作为当前工作目录,所以ls命令列出的是HOME目录的内容HOME目录:每个Linux操作用户在Linux系统的个人账户目录,路径在:/home/用户名当不使用选项和参数,直接使用ls命令本体,表示:以形式,列出。原创 2024-11-30 21:45:06 · 1275 阅读 · 0 评论