news 2026/10/20 14:18:52

自学嵌入式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_CREAT或IPC_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/10/19 13:30:15

LangFlow权限控制系统设想与路线图

LangFlow权限控制系统设想与路线图 在AI应用开发日益普及的今天,LangChain已经成为连接大语言模型与外部系统的核心桥梁。然而,随着团队协作和企业级部署需求的增长,基于LangChain构建的可视化工具LangFlow也面临着新的挑战——如何在保持低代…

作者头像 李华
网站建设 2026/10/20 21:55:06

LangFlow医疗辅助诊断系统搭建全过程

LangFlow医疗辅助诊断系统搭建全过程 在智慧医疗的浪潮中,一个现实问题始终困扰着医院信息化团队:如何让医生真正参与到AI系统的构建中?传统的智能辅助诊断系统往往由工程师闭门开发,临床专家只能被动接受输出结果。即便模型准确率…

作者头像 李华
网站建设 2026/10/20 6:46:13

LangFlow图像生成任务整合Stable Diffusion步骤

LangFlow整合Stable Diffusion实现图像生成的完整实践 在AI应用开发日益复杂的今天,如何快速构建一个从自然语言输入到高质量图像输出的端到端系统,成为许多开发者和创意工作者关注的核心问题。传统的做法是编写大量胶水代码来串联大模型调用、提示词优化…

作者头像 李华
网站建设 2026/10/21 0:33:54

GESP认证C++编程真题解析 | B3927 [GESP202312 四级] 小杨的字典

​欢迎大家订阅我的专栏:算法题解:C与Python实现! 本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战! 专栏特色 1.经典算法练习:根据信息学竞赛大纲,精心挑选…

作者头像 李华
网站建设 2026/10/20 17:26:34

LangFlow监控面板怎么加?自定义指标追踪方案

LangFlow监控面板怎么加?自定义指标追踪方案 在AI应用开发日益普及的今天,大语言模型(LLM)已经不再是实验室里的“黑科技”,而是逐渐走进企业级系统的基础设施。LangChain作为主流框架之一,极大简化了复杂A…

作者头像 李华
网站建设 2026/10/21 1:56:14

8个降AI率工具推荐,自考学生必看!

8个降AI率工具推荐,自考学生必看! AI降重工具:自考论文的得力助手 随着人工智能技术的快速发展,越来越多的学术写作开始借助AI工具完成。然而,对于自考学生而言,如何在享受AI高效写作的同时,避免…

作者头像 李华