当前位置: 首页 > news >正文

嵌入式第三十二天(信号,共享内存)

一.信号

2.主要信号:

3.信号处理流程

二.相关函数接口

1.

2.发送信号

示例:


#include<stdio.h>
#include<unistd.h>
#include<signal.h>
#include<stdlib.h>
#include<sys/wait.h>
#include <sys/types.h>void handler(int signum)
{int i = 3;while(i--){printf("son is doing homework\n");}kill(getppid(),SIGUSR2);exit(0);
}void handler1(int signum)
{int i = 2;while(i--){printf("father is going home\n");sleep(1);}wait(NULL);exit(0);
}int main(int argc,const char *argv[])
{pid_t pid = fork();if(pid > 0){signal(SIGUSR2,handler1);int i = 8;while(i--){printf("father is working\n");sleep(1);}kill(pid,SIGUSR1);while(1){printf("father is go shopping\n");sleep(1);}}else if(pid == 0){signal(SIGUSR1,handler);while(1){printf("son is playing games\n");sleep(1);}}else{printf("fork error\n");return -1;}return 0;
}

3.其他发送信号的函数接口

示例:


#include<stdio.h>
#include<signal.h>
#include<stdlib.h>
#include<unistd.h>int cnt  = 1;void handler(int signum)
{printf("超时%d次\n",cnt);if(cnt == 3){exit(0);}alarm(3);cnt++;
}int main(int argc,const char *argv[])
{char buff[1024] = {0};signal(SIGALRM,handler);alarm(3);while(1){fgets(buff,sizeof(buff),stdin);cnt = 1;alarm(3);}return 0;
}

三.共享内存

1.原理

2.流程:

3.相关函数接口

1.

2.

3.

4.

5.

示例:

#ifndef __HEAD_H__
#define __HEAD_H__#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>
#include <sys/wait.h>
#include <fcntl.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/ipc.h>
#include <sys/shm.h>#endif

send:

#include "head.h"int main(int argc, const char *argv[])
{//ftok();//shmget();//shmat();//p-->//shmdt();//shmctl();key_t key = ftok(".", '!');if (key < 0){perror("ftok error");return -1;}printf("key = %x\n", key);int shmid = shmget(key, 4096,IPC_CREAT|0664);if (shmid < 0){perror("shmget error");return -1;}printf("shmid = %d\n", shmid);void *pmem = shmat(shmid, NULL, !SHM_RDONLY);if ((void *)-1 == pmem){perror("shmat error");return -1;}//*((int *)pmem) = 10;strcpy((char *)pmem, "hello");shmdt(pmem);//shmctl(shmid, IPC_RMID, NULL);return 0;
}

receive:

#include "head.h"int main(int argc, const char *argv[])
{//ftok();//shmget();//shmat();//p-->//shmdt();//shmctl();key_t key = ftok(".", '!');if (key < 0){perror("ftok error");return -1;}printf("key = %x\n", key);int shmid = shmget(key, 4096, IPC_CREAT|0664);if (shmid < 0){perror("shmget error");return -1;}printf("shmid = %d\n", shmid);void *pmem = shmat(shmid, NULL, !SHM_RDONLY);if ((void *)-1 == pmem){perror("shmat error");return -1;}printf("recv: %s\n", (char *)pmem);	shmdt(pmem);//shmctl(shmid, IPC_RMID, NULL);return 0;
}

6.共享内存其他相关操作

7.实现进程间同步方法

http://www.dtcms.com/a/339363.html

相关文章:

  • 装修水电全改的避坑指南有哪些?
  • [激光原理与应用-304]:光学设计 - 光学设计报告的主要内容、格式与示例:系统记录了从需求分析到最终设计的完整过程
  • windows环境,安装kafka
  • PMP项目管理:PMBOK 第六版 与 第七版 有啥区别 / 如何备考
  • Spring Boot应用实现图片资源服务
  • WSL2环境下的Claude Code与lanyuncodingui安装与配置
  • 差速转向机器人研发:创新驱动的未来移动技术探索
  • 子网掩码(拓)
  • 汇编语言学习2---GNU Debugger (GDB)
  • bypass webshell--Trait
  • canopen 初体验
  • 【qml-4】qml与c++交互(类型多例)
  • 配置nginx以支持http3
  • rabbitmq发送的延迟消息时间过长就立即消费了
  • Maven的三种项目打包方式——pom,jar,war的区别
  • 微算法科技(NASDAQ: MLGO)研究利用PBFT中的动态视图变换机制,实现区块链系统高效运转
  • 股指本周想法
  • 区块链 + 域名Web3时代域名投资的新风口(下)
  • 使用 Docker 安装长安链管理平台 + 部署长安链
  • DL00291-联邦学习以去中心化锂离子电池健康预测模型完整实现
  • Transformer实战(13)——微调Transformer语言模型用于文本分类
  • 操作系统:多线程、进程管理、内存分配、任务调度等
  • Gemini CLI 详细操作手册
  • ECC升级S4,AVL自定义GUI 状态无法显示全选和取消全选按钮
  • Matplotlib数据可视化实战:Matplotlib基础与实践-快速上手数据可视化
  • 学习嵌入式的第二十一天——数据结构——链表
  • 08.19总结
  • 豆包1.5轻量版 vs Gemini 2.5闪存版:生成5000字深度文章,哪个模型更合适?
  • 玳瑁的嵌入式日记D20-08019(数据结构)
  • audio接口的技术发展