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

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

一.信号

linux支持的信号(kill -l查询)

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.lryc.cn/news/626163.html

相关文章:

  • 机器学习概念(面试题库)
  • 8.19笔记
  • Python + 淘宝 API 开发:自动化采集商品数据的完整流程​
  • python新工具-uv包管理工具
  • RPC高频问题与底层原理剖析
  • Chrome插件开发【windows】
  • 【最新版】CRMEB Pro版v3.4系统源码全开源+PC端+uniapp前端+搭建教程
  • LLM(大语言模型)的工作原理 图文讲解
  • 网络间的通用语言TCP/IP-网络中的通用规则4
  • 大模型+RPA:如何用AI实现企业流程自动化的“降本增效”?
  • 基于SpringBoot+Vue的养老院管理系统的设计与实现 智能养老系统 养老架构管理 养老小程序
  • Linux系统部署python程序
  • SConscript 脚本入门教程
  • InfoNES模拟器HarmonyOS移植指南
  • Redis缓存加速测试数据交互:从前缀键清理到前沿性能革命
  • 图形化监控用数据动态刷新方法
  • Transformer入门到精通(附高清文档)
  • 内网后渗透攻击--隐藏通信隧道技术(压缩、上传,下载)
  • 常见的软件图片缩放,算法如何选择?
  • 【开源工具】基于社会工程学的智能密码字典生成器开发(附完整源码)
  • 字节开源了一款具备长期记忆能力的多模态智能体:M3-Agent
  • 洛谷 P2834 纸币问题 3-普及-
  • Flink原理与实践 · 第三章总结
  • 第5.6节:awk字符串运算
  • 【驱动】RK3576:桌面操作系统基本概念
  • L2TP虚拟局域网
  • 快速傅里叶变换:数字信号处理的基石算法
  • Orange的运维学习日记--47.Ansible进阶之异步处理
  • 数据库-MYSQL配置下载
  • go链路追踪