linux
文章平均质量分 92
KingRumn
An old boy with peaceful heart but remarkable perseverance!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
DBUS源码剖析之DBusMessage消息头
D-Bus消息头(DBusHeader)是D-Bus消息的元数据部分,包含路由信息、消息类型和标志等关键数据。它由16字节固定部分和可变长度字段数组组成,采用网络字节流格式。固定部分包含字节序、消息类型、标志、协议版本、消息体长度、序列号和字段数组长度。字段数组则存储路径、接口、成员等路由信息,每个字段以变体类型编码并8字节对齐。消息头支持延迟解析和缓存优化,与消息体分开存储,便于网络传输和处理。这种设计实现了高效的路由、类型识别和请求-回复匹配功能。原创 2026-01-03 08:00:00 · 566 阅读 · 0 评论 -
DBUS源码剖析之DBusMessage消息类型及创建
本文介绍了D-Bus消息系统中的4种基本消息类型及其用途,重点分析了 D-Bus定义了4种核心消息类型:方法调用(METHOD_CALL)、方法返回(METHOD_RETURN)、错误(ERROR)和信号(SIGNAL),每种类型有特定的通信方向和用途。原创 2026-01-02 07:30:00 · 737 阅读 · 0 评论 -
DBUS源码剖析之DBusMessage数据结构
D-Bus消息(DBusMessage)是D-Bus IPC系统的基本通信单元,包含消息头和消息体两部分。消息类型包括方法调用、方法返回、信号和错误消息。消息生命周期涵盖创建、填充、锁定、序列化、传输、反序列化、使用和释放等阶段。内部数据结构采用引用计数管理生命周期,包含消息头、消息体、锁定标志等字段,支持网络字节流序列化和资源跟踪功能。该设计实现了进程间通信的安全性和可靠性。原创 2026-01-01 07:45:00 · 1413 阅读 · 0 评论 -
DBUS源码剖析之内存与内存池
D-Bus 实现了一套高效的内存管理机制,主要包括:1) 封装系统 malloc 的内存分配函数,提供调试功能和跨平台一致性;2) 内存池优化技术,减少碎片和提高小对象分配性能。内存分配函数统一处理零字节分配,并支持调试模式下的内存保护。内存池通过块分配和空闲链表管理,优化了频繁的小对象分配场景。这些机制虽然不公开为 API,但显著提升了 D-Bus 的性能和可靠性。原创 2025-12-31 08:00:00 · 1334 阅读 · 0 评论 -
DBUS源码剖析之编译器属性扩展
D-Bus 源码中广泛使用__attribute__编译器属性来增强代码质量,主要包括: 类型安全检查:通过_DBUS_GNUC_PRINTF验证printf格式字符串 内存管理优化:使用DBUS_MALLOC和DBUS_ALLOC_SIZE标记内存分配函数 错误处理:_DBUS_WARN_UNUSED_RESULT强制检查返回值 代码优化:_DBUS_GNUC_NORETURN标记不返回函数 兼容性处理:通过宏定义在不支持编译器上自动降级 这些属性在dbus-macros.h中统一管理,确保跨平台兼容性。原创 2025-12-30 18:36:21 · 681 阅读 · 0 评论 -
DBUS源码剖析之DBusString数据类型
保护机制检查时机作用断言检查每次操作前检查基本约束和内部一致性最大长度限制设置长度时防止超过系统限制整数溢出检查增加长度时防止整数溢出导致的安全问题边界检查访问数据时防止越界访问自动重新分配空间不足时自动扩展,但不超过最大长度返回值检查所有修改操作让调用者知道操作是否成功关键设计原则防御性编程:假设所有输入都可能有问题多层检查:不依赖单一检查机制失败安全:操作失败时返回错误,不破坏数据显式错误处理:通过返回值明确告知调用者对齐维护每次内存重新分配后,调用。原创 2025-12-30 07:43:16 · 1221 阅读 · 0 评论 -
DBus源码剖析之项目架构设计
D-Bus(Desktop Bus)项目由于发起,旨在为 Linux 桌面环境提供一个统一的进程间通信(IPC)机制。原创 2025-12-29 18:20:53 · 1208 阅读 · 0 评论 -
玩转DBus命令行工具之qdbus使用
qdbus是 Qt 提供的 D-Bus 命令行工具,功能类似于gdbus,但使用 Qt 的 D-Bus 实现。它提供了便捷的方法调用、属性访问和信号监听功能。原创 2025-12-29 07:22:32 · 659 阅读 · 0 评论 -
玩转DBus命令行工具之gdbus使用
gdbus是 GLib 提供的 D-Bus 工具集,功能比dbus-send更强大,支持复杂类型(variant、数组等),自动显示返回值,提供更好的类型处理。原创 2025-12-28 07:47:54 · 759 阅读 · 0 评论 -
玩转DBus命令行工具之dbus-monitor
是 D-Bus 的消息监视工具,用于实时查看总线上的所有消息,包括方法调用、方法返回、信号和错误。它是调试 D-Bus 应用程序的重要工具。原创 2025-12-28 07:46:28 · 873 阅读 · 0 评论 -
玩转DBus命令行工具之dbus-send
假设有一个服务 com.example.Service,对象路径 /com/example/Object# 接口 com.example.Interface,方法 GetData,参数为字符串。原创 2025-12-27 07:19:00 · 917 阅读 · 0 评论 -
玩转DBus命令行工具之dbus-daemon和dbus-launch的使用
的配置文件采用 XML 格式,遵循 D-Bus 配置 DTD。这些本地配置文件会在主配置之后加载,优先级最高。,这些文件会在系统更新时被覆盖。:systemd 环境下常用。,不会生成 PID 文件。原创 2025-12-27 07:17:24 · 927 阅读 · 0 评论 -
Linux进程间通信之玩转DBus命令行工具
D-Bus 提供了多个命令行工具,用于在终端中与 D-Bus 总线交互、发送方法调用、监听信号、访问属性等。这些工具对于调试、测试和管理 D-Bus 服务非常有用。原创 2025-12-26 07:27:05 · 742 阅读 · 0 评论 -
Linux进程间通信之D-Bus
D-Bus(Desktop Bus)是一种高级的进程间通信机制,主要用于Linux桌面环境和系统服务之间的通信。D-Bus提供了一个消息总线系统,允许应用程序之间进行异步通信,支持方法调用和信号等通信模式。此外,D-Bus还提供了标准化的属性访问机制,通过接口的方法调用来实现对象属性的读取和设置。原创 2025-12-26 07:25:34 · 568 阅读 · 0 评论 -
Linux进程间通信之通信模式
单向通信:简单、高效,适合数据流处理双向通信:灵活,适合客户端-服务器模式消息传递:保持消息边界,适合结构化数据方法调用/RPC:类似函数调用,适合服务调用信号/事件通知:异步、低延迟,适合事件驱动属性访问:面向对象,适合配置和状态管理发布/订阅:解耦,适合事件驱动架构共享状态:最高性能,适合大数据量和频繁通信通信方向:单向、双向还是多向同步性:同步还是异步数据量:小、中还是大性能要求:延迟和吞吐量要求复杂度:简单还是复杂场景功能需求:是否需要服务发现、持久化等高级功能。原创 2025-12-25 07:41:12 · 759 阅读 · 0 评论 -
Linux信号之fork安全性
虽然fork()多线程程序: 可能导致锁状态不一致和死锁正在执行 I/O 操作: 可能导致缓冲区状态不一致正在执行内存操作: 可能导致堆状态不一致推荐做法: 在信号处理函数中只设置标志或使用管道通知主程序, 然后在主程序中安全地调用fork()原创 2025-12-25 07:40:42 · 809 阅读 · 0 评论 -
Linux信号之标准信号可以用sigqueue排队吗
特性标准信号 (使用 kill)标准信号 (使用 sigqueue)实时信号 (使用 kill/sigqueue)排队能力❌ 不排队⚠️ 有限排队✅ 完全排队相同信号数量只保留 1 个队列中只保留 1 个可以排队多个数据传递❌ 不支持✅ 支持 (siginfo_t)✅ 支持 (siginfo_t)信号丢失✅ 可能丢失⚠️ 可能丢失 (队列满时)❌ 不会丢失 (受资源限制)FIFO 顺序N/A⚠️ 部分支持✅ 完全支持资源限制N/A受 RLIMIT_SIGPENDING。原创 2025-12-24 07:38:24 · 899 阅读 · 0 评论 -
Linux信号之定时器与SIGALRM
SIGALRM是 Linux 系统中专门用于定时器通知的信号. 它由内核定时器机制触发, 用于在指定时间后通知进程.SIGALRM是一个标准信号(信号编号 14), 可以被捕获和处理.原创 2025-12-24 07:37:02 · 1045 阅读 · 0 评论 -
Linux信号之信号安全
信号处理函数必须只调用信号安全函数使用在信号处理函数和主程序之间通信最小化信号处理函数, 只做必要的工作使用管道或 signalfd 将信号转换为 I/O 事件避免在信号处理函数中使用全局状态。原创 2025-12-23 07:47:00 · 1087 阅读 · 0 评论 -
Linux信号之标准信号与实时信号
用户自定义信号 1: 用户自定义信号 2这两个信号专门为应用程序保留, 默认行为是终止进程, 但可以被捕获和处理. 常用于进程间通信和自定义事件通知.编号范围SIGRTMIN(通常 34) 到SIGRTMAX(通常 64)可以排队: 多个相同信号可以排队, 不会丢失传递数据: 可以通过sigqueue()传递额外数据 (siginfo_tFIFO 顺序: 按先进先出顺序传递优先级: 实时信号优先于标准信号传递类别信号说明终止信号请求进程终止强制终止SIGKILL强制杀死进程异常信号。原创 2025-12-23 07:43:48 · 1156 阅读 · 0 评论 -
Linux进程间通信之信号实现篇
本文基于 Linux 2.6.12 内核分析了信号机制的实现,重点介绍了核心数据结构、系统调用路径和关键流程。信号作为进程间通信和控制的异步通知机制,主要涉及 signal_struct、sighand_struct、sigpending 等核心数据结构。系统调用路径包括 kill、sigaction、sigprocmask 等关键接口,发送信号流程涵盖权限检查、目标查找和信号队列处理。内核通过信号位图管理信号状态,并采用共享/私有信号队列实现高效传递。原创 2025-12-22 11:44:30 · 1135 阅读 · 0 评论 -
Linux进程间通信之信号
信号是Linux系统中用于进程间通信和进程控制的异步通知机制。它允许进程发送简单的事件通知,但无法传递复杂数据。系统预定义了多种信号(如SIGINT、SIGTERM等),并支持用户自定义信号(SIGUSR1/SIGUSR2)和实时信号(SIGRTMIN-SIGRTMAX)。主要API包括signal()、sigaction()和kill(),其中sigaction()是更推荐的实现方式。信号处理可以是默认行为、忽略或自定义处理函数。原创 2025-12-22 11:38:13 · 542 阅读 · 0 评论 -
Linux进程间通信之共享内存(POSIX)
POSIX 共享内存是 POSIX.1b 标准定义的进程间通信机制, 允许多个进程共享同一块物理内存区域, 进程可以直接读写这块内存, 无需进行数据拷贝. 由于多个进程可以同时访问, 通常需要配合信号量等同步机制使用. POSIX 共享内存基于文件描述符模型, 使用名字标识, 在/dev/shm文件系统中可见.原创 2025-12-21 07:57:23 · 1175 阅读 · 0 评论 -
Linux进程间通信之共享内存(POSIX)实现篇
基于 2.6.12 内核, 说明 POSIX 共享内存的核心数据结构、系统调用路径及关键实现. POSIX 共享内存通过 shmem(tmpfs) 文件系统实现, 主要文件:mm/shmem.cipc/shm.c(部分)、fs/namei.c(路径解析).原创 2025-12-21 07:56:51 · 571 阅读 · 0 评论 -
Linux进程间通信之消息队列(POSIX)实现篇
基于 2.6.12 内核, 说明 POSIX 消息队列的核心数据结构、系统调用路径及关键实现. POSIX 消息队列通过 mqueue 文件系统实现, 主要文件: 、.msg_msg (单条消息, 复用 System V 消息队列)mq_attr (用户可见队列属性)ext_wait_queue (等待队列)系统调用路径 → → 创建或打开队列 → 返回消息队列描述符 → → 构造 并按优先级入队 → → 取出优先级最高的消息并删除 → → 关闭消息队列描述符 →原创 2025-12-20 07:14:54 · 1019 阅读 · 0 评论 -
Linux进程间通信之消息队列(POSIX)
✅可行: 通过发送多条消息(不同优先级)实现 1 对多❌不可行: 单条消息被多个进程同时接收(广播)💡建议: 如果需要真正的广播功能, 考虑使用共享内存 + 信号量。原创 2025-12-20 07:14:12 · 1299 阅读 · 0 评论 -
Linux进程间通信System V IPC 与 POSIX IPC 跨平台兼容性分析
POSIX IPC: 跨平台兼容性更好, 推荐用于新项目: 在某些传统 Unix 系统上支持更好检查机制: 编译时和运行时检查都很重要回退策略: 提供多层次的回退机制抽象层: 使用抽象层隐藏平台差异选择建议新项目: 优先使用 POSIX IPC, 提供 System V IPC 回退现有项目: 继续使用 System V IPC, 逐步迁移到 POSIX IPC多平台项目: 使用抽象层, 支持多种实现方式嵌入式系统: 根据内核配置选择, 可能需要自定义实现。原创 2025-12-19 13:16:43 · 972 阅读 · 0 评论 -
Linux进程间通信POSIX与System V内核实现位置对比
特性POSIX 消息队列POSIX 共享内存核心功能消息管理、排队、优先级内存映射、页管理主要依赖IPC 框架、文件系统内存管理子系统数据结构msg_msg系统调用mq_openmq_sendmq_receiveshm_openmmapmunmap实现位置mm/shmem.cmm/mmap.c与 System V 的关系功能相似, 可类比实现方式不同, 但都使用 shmem结论: POSIX 消息队列放在ipc/目录是因为它是 IPC 机制, 而 POSIX 共享内存放在mm/原创 2025-12-19 13:16:03 · 1255 阅读 · 0 评论 -
Linux进程间通信之 System V IPC 与 POSIX IPC 对比
IPC机制对比摘要 Linux提供System V IPC和POSIX IPC两套进程间通信机制。System V IPC源自AT&T Unix,历史悠久但API较老,使用键值标识对象,管理工具为ipcs/ipcrm。POSIX IPC基于POSIX标准,采用命名方式标识对象,API设计更现代,通过文件系统可见和管理。原创 2025-12-18 13:37:34 · 744 阅读 · 0 评论 -
Linux进程间通信之操作共享内存的命令
本文档总结了System V共享内存的管理命令。主要内容包括:1)使用ipcs -m查看共享内存段信息,包括键值、标识符、大小和附加进程数;2)解释status字段含义,正常状态为空,dest表示已标记删除但仍有进程附加;3)删除命令ipcrm -m和ipcrm -M的使用方法;4)检查共享内存附加状态的多种方法,如查看nattch字段、/proc/sysvipc/shm文件等;5)提供实用命令组合,如查看正在使用的内存段和清理无附加进程的残留段。文档还强调了删除操作的注意事项和状态转换流程。原创 2025-12-18 10:52:18 · 991 阅读 · 0 评论 -
Linux进程间通信mmap与共享内存对比
mmap与System V共享内存是Linux中两种进程间通信机制,都支持零拷贝的高效内存共享。mmap提供统一API,支持文件映射和匿名映射,适合大文件处理和按需加载,但依赖文件系统。System V共享内存使用专用API,适合高性能纯内存共享,但需显式管理生命周期。mmap功能更灵活,支持文件持久化;System V共享内存性能更优,适合独立进程间大数据量传输。两者都需要用户空间同步机制,选择取决于具体场景需求。原创 2025-12-17 17:57:27 · 728 阅读 · 0 评论 -
Linux进程间通信内存映射(mmap)实现篇
本文基于 Linux 2.6.12 内核分析了 mmap 系统调用的实现机制。核心内容包括:进程地址空间描述符 mm_struct 和虚拟内存区域 vm_area_struct 数据结构;系统调用路径从用户空间到内核的转换过程;以及创建映射的核心流程 do_mmap_pgoff,涉及参数校验、地址选择、权限检查、VMA 建立等关键步骤。文章详细说明了 mmap 如何将文件或匿名内存映射到进程地址空间,包括文件映射的特殊处理、内存锁定检查等实现细节。原创 2025-12-16 17:51:43 · 677 阅读 · 0 评论 -
Linux同步机制之信号量实现篇
其他辅助结构:代码示例()P/V 操作(semop)复制用户的 数组到内核,校验 /。获取 IPC 锁 (封装 + 自旋锁)。调用 :对每个 尝试原子检查/修改 。 且不足时:若 返回 ;否则构造 ,入 并睡眠。:等待信号量值为 0;不足时同上阻塞/返回。:直接加值。成功路径:更新 ,处理 (记录到 链),唤醒等待队列 。阻塞路径:当前任务挂入 ,;被唤醒后重新检查,若 /信号则返回错误。代码示例(,简化)控制(semctl): 调用 删除集合,移除 ,唤原创 2025-12-14 09:51:00 · 629 阅读 · 0 评论 -
Linux同步机制之信号量
System V信号量是内核提供的同步原语,用于进程间的互斥与资源计数。它通过计数器实现P操作(减1)和V操作(加1),支持阻塞机制和原子操作。主要API包括semget创建信号量集、semop执行PV操作、semctl控制信号量。典型应用包括互斥锁(初值1)和资源池(初值N)。使用时需注意键值管理、初始值设置、资源清理和死锁避免。优点在于强大的同步能力,缺点是API复杂且有系统限制。适用于进程同步、生产者-消费者等场景,但不适合简单通信。原创 2025-12-13 22:26:12 · 786 阅读 · 0 评论 -
Linux进程间通信之内存映射
内存映射(mmap)是一种高效的文件I/O和进程间通信机制,它通过将文件或设备映射到进程地址空间,使进程能像访问普通内存一样访问文件内容。mmap支持文件映射和匿名映射两种方式,前者用于文件操作,后者用于进程间通信。其核心优势包括零拷贝访问、共享内存区域和按需加载机制。系统调用包括mmap()创建映射、munmap()取消映射和msync()同步数据。示例展示了如何使用mmap进行文件读写和多线程/多进程间的安全数据共享,其中多进程通信需要特殊处理互斥锁的进程间共享属性。原创 2025-12-13 21:14:46 · 656 阅读 · 0 评论 -
Linux进程间通信之共享内存与消息队列的竞争问题(同步策略)对比
消息队列与共享内存的竞争问题对比分析 消息队列在内核层面实现了原子操作保护,确保发送、接收和删除操作的并发安全性,但应用层仍需处理逻辑竞争(如消息接收顺序、队列删除竞争等)。相比之下,共享内存缺乏内核保护,存在严重的数据竞争风险,必须借助信号量等同步机制实现互斥访问。消息队列适合简单通信场景,而共享内存虽高效但需额外同步开销。开发者应根据场景需求选择:消息队列适用于无需复杂同步的通信,共享内存则适合高性能但能承担同步成本的数据共享。原创 2025-12-12 15:47:39 · 1425 阅读 · 0 评论 -
Linux进程间通信之共享内存实现篇
Linux 内核共享内存实现摘要(2.6.12) Linux 内核通过 ipc/shm.c 实现 System V 共享内存,核心数据结构为 shmid_kernel,包含权限、文件指针、大小等元数据。关键流程包括: 创建段:shmget 调用 newseg() 创建匿名 shmem 文件并初始化元数据,通过 ipc_addid 注册到 IPC 表。 映射段:shmat 调用 do_shmat() 检查权限后,使用 do_mmap_pgoff 将共享文件映射到进程地址空间,并更新引用计数。原创 2025-12-12 15:32:57 · 712 阅读 · 0 评论 -
Linux进程间通信之共享内存
摘要:共享内存是System V IPC中最快的进程间通信方式,允许多个进程直接访问同一物理内存区域,实现零拷贝数据传输。通过shmget()创建/获取共享内存,shmat()附加到进程地址空间,shmdt()分离,shmctl()删除。需配合信号量等同步机制防止竞争条件。优点是高速、高效、灵活,缺点是需手动同步和管理。适用于大数据量、高性能要求的进程通信场景,但需注意资源清理和权限设置。典型应用包括频繁通信的多进程数据共享。原创 2025-12-11 17:08:15 · 628 阅读 · 0 评论 -
Linux进程间通信之消息队列实现篇
基于 2.6.12 内核, 说明 System V 消息队列的核心数据结构、系统调用路径及关键实现. 主要文件:ipc/msg.c。原创 2025-12-11 13:57:26 · 938 阅读 · 0 评论 -
Linux进程间通信之消息队列
消息队列是一种System V IPC机制,允许进程通过消息进行通信。每条消息包含类型和正文,接收方可按类型选择性接收。消息队列由内核维护,具有持久性直到显式删除。主要特点包括:消息边界明确、一对一消费模式(消息被接收后即删除)、任意进程间通信。通过msgget()创建队列,msgsnd()发送消息,msgrcv()接收消息。1对多通信需发送多条不同mtype的消息。系统调用包括msgget()、msgsnd()、msgrcv()和msgctl(),分别用于创建、发送、接收和控制消息队列。原创 2025-12-10 15:06:23 · 996 阅读 · 0 评论
分享