进程间的七大通信方式(概括总结)

本文详细介绍了进程间通信的七大方式:信号、文件、管道、共享内存、信号量、消息队列和套接字。信号用于通知事件发生,文件实现数据交换,管道提供单向数据流,共享内存允许进程共享内存区域,信号量控制资源访问,消息队列按消息体发送数据,套接字支持网络进程通信。各通信方式有其特点和适用场景,如文件通信速度较慢,管道适合父子进程,共享内存和信号量常配合使用,消息队列数据独立,套接字用于网络通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进程间的七大通信方式

signal、file、pipe、shm、sem、msg、socket

1,signal

信号通信的目的:某某事件发生!此时需要处理什么,进程间(可以是不相关的进程)传递信号

场景:信号又被称之为中断,需要处理什么对应的是中断处理函数,此时设置断点,形参入栈,保存现场信息,然后去执行中断处理函数,当处理完成之后,恢复现场信息,程序继续往下执行

Linux下可以通过kill -l查看其所有信号(其一共64种信号)

发送信号:kill(pid, 信号) //对指定的进程发送什么信号

raise(信号) <==> kill(getpid(), 信号) //就是给自己发送指定的信号

alarm(秒数) :定时产生一个SIGALRM信号,调用alarm方法之后,只会产生一次该信号

接收信号:signal(信号,函数指针) //对该信号接收,并调用自己的函数指针进行处理

信号通信方式的局限性:不能够传递复杂的、有效的、具体的数据

2,file

每打开一个文件,就会产生一个文件控制块,而文件控制块与文件描述符是一一对应的,通过对文件描述符的操作进而对文件进行操作

文件描述符的分配原则:编号的连续性(节省编号的资源)

通过文件系统对文件描述符的读/写控制,进程间一方对文件写,一方对文件读,达到文件之间的通信;可以是不相关进程间的通信

使用的API:write()和read()

为了能够实现两个进程通过文件进行有序的数据交流,还得借助于信号的处理机制

(1)、通过pause()等待对方发起一个信号,已确认可以开始执行下一次读/写操作;

pause():只要接受到任何的信号,立马就可以往下执行

(2)、通过kill(,SIGUSR1)方法向对方发出明确的信号:可以开始下一步执行(读、写)

缺点:i、文件通信没有访问规则,ii、(因为CPU > 内存 > 文件)是低速的

3,pipe

在通信的进程间构建一个单向的数据流动的通道,数据通过管道从一个进程流向另一个进程是具有时间先后顺序的,所以是半双工通信;管道文件是一种临时文件,不是磁盘上真真正正的文件,是一块内存区域

分为:

fd[0]:读出数据

fd[1]:写入数据

无名管道:只能用于亲缘关系的父子进程,fd = pipe(),得到的是管道文件描述符,通过fd,用的是write()和read()读写数据;

达到双方通信:得用2个管道,达到可以发多句话,的fork()子进程处理

有名管道:非父子进程间通信mkfifo()

mkfifo会在文件系统中创建一个管道文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值