嵌入式学习第30天——软中断,Ip进程间的通信

中断:正在执行A的操作,然后被B打断;去执行B,等B执行完后,再去执行A

函数

signal

sighandler_t signal(int signum, sighandler_t handler);

功能:注册信号处理函数

参数:

signum:信号编号

sighandler_t handler:信号处理函数

返回值:成功:上一次处理的函数指针的地址

失败:NULL

用途:进行僵尸态的回收

kill:

int kill(pid_t pid, int sig);

就相当于kill

int raise------飞升,给调用者发信号;也可以把自己飞升

int raise(int sig)

unsigned int alarm(unsigned int secnd)

就是定时

IPC进程通信

a.共享内存

b.消息队列

c.信号灯

共享内存(没有了用户和内核空间的数据搬移,效率最高)

就是说一个进程中它的用户空间其实是虚拟的;虽然进程间的空间地址一样;如果想要实现进程间的通信,就要在内核空间里开辟一个共享对象空间;这个空间会对应他们的用户空间地址;在进行通信时,只需要在共享空间里找就行了;

1.得到同一个key值

key_t ftok(const char*pathname,int proj_id)

参数:pathname:就是路径地址,一般写成"/";

proj_id:就是一个八位的值,写成字母比如'A';

2.找到共享内存

int shmget(ke_t key,size_t size,int shmflg)

参数:key,就是ftok这个函数的返回值,就是那个key值

size:空间大小,一般都是1024的倍数

shmflg:标志位,常用的IPC_CREAT

3.映射:

void *shmat(int shmid,const void *shmaddr,int shmflag)

参数:shmid:就是shmget返回的值

shmaddr:就是你要指定到哪个虚拟空间;填NULL,让系统自动挂载空间

shmflag:0就是可读可写

SHM_RDONLY是只读

4.通信

5.卸载共享对象

shmctl(int shmid,const void *shmaddr,struct shmid_ds *buf)

参数:shmid :shmget 返回的id

shmaddr:IPC_RMID------标记删除共享内存

buf:如果是IPC_RMID的时候就直接填NULL

相关推荐
Rabitebla7 小时前
【Linux】进程控制(十二) 自定义 Shell(二):内建命令与进程工作目录管理
linux·c++·笔记·学习·bash
Gary移动存储固件8 小时前
eMMC5.1协议中文学习讲解(6.6.17~6.6.22.4.6)
学习·ufs·emmc·nand·存储固件
一个天蝎座 白勺 程序猿9 小时前
别让收藏夹替你学习:我搭AI知识体系的完整方法,脚本直接拿去用
人工智能·学习·ai·ai学习
楚山之石9 小时前
【Nat Biomed Eng】Connectome 2.0 超高梯度扫描仪:500 mT/m 与 600 T/m/s 把活体人脑微观结构分辨推进到亚微米级
图像处理·学习·数据分析·mri
坤坤子吖12 小时前
Linux网络编程:TCP 粘包与半包问题,如何正确处理 TCP 流式数据?
linux·服务器·网络·笔记·网络协议·学习
LGL6030A16 小时前
Java学习历程31——初识Spring Boot
java·spring boot·学习
阿达和自己17 小时前
springboot学习-springboot引入MyBatis-Plus
spring boot·学习·mybatis
旖旎夜光18 小时前
【C++ 基础入门】C++11 新特性(中):右值引用、移动语义与完美转发
开发语言·c++·笔记·学习
§ꦿCFོ༉1 天前
嵌入式八股文—C语言入门学习(四)
c语言·开发语言·学习
2603_969694851 天前
【JavaWeb学习记录】MyBatis核心知识点与实战笔记:从入门到动态SQL
笔记·sql·学习·mysql·mybatis·javaweb·学习方法