news 2026/8/9 9:07:55

自学嵌入式day35,信号和共享内存

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
自学嵌入式day35,信号和共享内存

信号通信

信号通信是一种异步通信机制,常用于处理随机事件和通知。发送和接收信号的过程如下:

  1. 当随机事件发生时,发送信号请求。
  2. Linux内核接收到信号请求后,在进程控制块(PCB)链表中查找目标进程的PID(例如1000)。
  3. 找到目标进程后,暂停其当前执行流程,调用PCB中信号处理函数对应的函数(例如,发送信号2时调用handle2)。
  4. 信号处理函数执行完毕后,进程恢复原代码的执行。
信号相关函数

发送信号函数

int kill(pid_t pid, int sig);
  • 功能:向指定PID的进程发送信号。
  • 参数
    • pid:目标进程的PID。
    • sig:信号编号(如kill -l列出的信号)。
  • 返回值
    • 成功:0。
    • 失败:-1。

信号捕获函数

sighandler_t signal(int signum, sighandler_t handler);
  • 功能:自定义或指定信号的处理方式。
  • 参数
    • signum:信号编号。
    • handler:处理函数宏或自定义函数:
      • SIG_DFL:默认处理。
      • SIG_IGN:忽略信号。
      • fun:自定义处理函数。
  • 返回值:成功时返回原处理函数指针,失败时返回SIG_ERR

共享内存

共享内存是一种基于System V的进程间通信(IPC)机制,允许多个进程访问同一块内存区域。

函数调用步骤
  1. 生成键值申请对象映射对象读写对象撤销映射删除对象
与管道的区别
  1. 读写权限:共享内存允许双方读写,管道通常单向。
  2. 阻塞机制:共享内存无读/写阻塞,需搭配信号或信号集同步。
  3. 数据结构:共享内存是初级内存区域(如字符数组),数据持久化。
相关函数接口

生成键值函数

key_t ftok(const char *pathname, int proj_id);
  • 功能:通过文件路径和ID生成唯一键值。
  • 参数
    • pathname:文件路径(需稳定存在)。
    • proj_id:整型ID(常用ASCII字符)。
  • 返回值
    • 成功:键值。
    • 失败:-1。

申请共享内存函数

int shmget(key_t key, size_t size, int shmflg);
  • 功能:申请共享内存对象。
  • 参数
    • key:唯一键值。
    • size:内存大小。
    • shmflg:权限标志(如IPC_CREATIPC_EXCL)。
  • 返回值
    • 成功:共享内存ID(shmid)。
    • 失败:-1。

映射共享内存函数

void *shmat(int shmid, const void *shmaddr, int shmflg);
  • 功能:将共享内存映射到本地地址空间。
  • 参数
    • shmid:共享内存ID。
    • shmaddr:本地地址(建议NULL由系统分配)。
    • shmflg:读写标志(0为读写,SHM_RDONLY为只读)。
  • 返回值
    • 成功:映射地址。
    • 失败:(void*)-1

读写操作

  • 使用memcpy()strcpy()进行数据读写。

撤销映射函数

int shmdt(const void *shmaddr);
  • 功能:断开共享内存映射。
  • 参数shmaddr:映射地址。
  • 返回值
    • 成功:0。
    • 失败:-1。

删除对象函数

int shmctl(int shmid, int cmd, struct shmid_ds *buf);
  • 功能:修改或删除共享内存对象。
  • 参数
    • shmid:共享内存ID。
    • cmd:命令宏(如IPC_RMID删除对象)。
    • buf:属性结构(建议NULL)。
  • 返回值
    • 成功:0。
    • 失败:-1。
相关命令
  • 查询对象ipcs -a(查看共享内存、信号量集、消息队列)。
  • 删除对象ipcrm -m(删除共享内存)。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/9 14:52:39

从合规到实战:企业安全建设的合规检查落地指南与风险规避策略

一、安全合规检查的核心价值:不止于“满足监管”,更是“安全筑基” 在数字化转型加速的当下,企业安全合规检查早已脱离“应付检查”的浅层认知,成为构建企业纵深防御体系的核心抓手。对于企业而言,合规检查的价值体现在…

作者头像 李华
网站建设 2026/8/9 11:10:10

LangFlow在AIGC领域的10种创新应用场景

LangFlow在AIGC领域的10种创新应用场景 在生成式AI(AIGC)迅速渗透各行各业的今天,一个核心矛盾日益凸显:大语言模型(LLM)的能力越来越强,但将其落地为可用产品的门槛却依然高得令人望而却步。开…

作者头像 李华
网站建设 2026/8/8 4:05:20

LangFlow日志记录功能配置说明

LangFlow日志记录功能配置说明 在构建复杂的AI工作流时,一个常见的挑战是:当流程运行异常或性能不佳时,我们往往只能看到“前端无输出”或“响应缓慢”这类模糊现象。尤其是在使用可视化工具如 LangFlow 进行快速原型开发的过程中&#xff0c…

作者头像 李华
网站建设 2026/8/9 11:57:01

SGLang AI 金融 π 对(杭州站)回顾:大模型推理的工程实践全景

12 月 20 日,SGLang AI 金融 π 对(杭州站)在杭州紫金港美居酒店成功举办。本次 Meetup 由 SGLang 与 AtomGit 社区联合发起,聚焦大模型在金融与复杂业务场景下的推理效率问题,吸引了大量来自 AI Infra、推理系统、金融…

作者头像 李华
网站建设 2026/8/8 10:25:38

Solana钓鱼攻击中Owner权限滥用机制与防御体系研究

摘要近年来,随着高性能区块链平台Solana生态的快速扩张,其独特的账户与权限模型在提升交易效率的同时,也引入了新型安全风险。2024年末至2025年初,多起针对Solana用户的钓鱼攻击事件造成数百万美元资产损失,其核心攻击…

作者头像 李华
网站建设 2026/8/9 3:06:04

能源管理系统(开源):打造智能高效的能源管控新模式

温馨提示:文末有资源获取方式~能源系统|能源系统源码|企业能源系统|企业能源系统源码|能源监测系统一、Java 与能源管理系统的邂逅​能源管理系统的核心使命在于实现能源的精细化管控。它通过实时收集各类能源数据,如电力、燃气、水、热能等的消耗情况&a…

作者头像 李华