IPC:interprocess communication-进程间通信
Linux环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间。任何一个进程的全 局变量在另一个进程中都看不到,所以进程和进程间不能互相访问,要交换数据必须通过内核,在内核中开辟一块缓存区,进程1把数据从用户空间拷贝到内存缓冲区,进程2再从内存缓冲区中把数据读走,内核提供的这种机制称为进程间通信(IPC)。
进程间通信
数据传输
资源共享
事件通知
进程控制
Linux 系统下的ipc (Linux IPC / 分类_Ruo_Xiao的博客-CSDN博客)
POSIX,Portable Operating System Interface for UNIX,是IEEE(电子电气工程师协会)为了在各种UNIX操作系统上运行软件而定义的一系列API标准总称,正式称呼为IEEE 1003,国际标准名称为ISO/IEC 9945。
分类:
1、匿名管道 / 有名管道:pipe、FIFO
2、信号:signal
3、消息队列:message queue
4、信号量:simaphore
5、共享内存区:shared memory
6、套接字:socket
记一次腾讯面试:进程之间究竟有哪些通信方式?如何通信? ---- 告别死记硬背_帅地的博客-CSDN博客
IPC方法比较 (Linux下IPC总结_huygft的博客-CSDN博客)
pipe-优点:实现简单;缺点:单向通信,只能用于有血缘关系进程间。
fifo-优点:可以在非血缘关系进程间。
信号-优点:开销小。
共享内存-优点:可以用于非血缘关系进程间;缺点:比较复杂。
本地套接字-优点:稳定性好;缺点:实现复杂。
共享内存和fifo的区别:在于数据是否可以反复读取;fifo是用队列实现的,不能反复读取;共享内存是Linux内核借助缓冲区,通过内存来实现,可以反复读取。
匿名/无名管道 (Linux进程通信----匿名管道)
pipe函数
特点
使用步骤
关于匿名管道的几点说明:
1.匿名管道是半双工的,即一个进程只能读,一个进程只能写要实现全双工,需要两个匿名管道。
2.只能在父子进程或者兄弟进程进行通信。
3.在读的时候关闭写文件描述符,在写的时候关闭读文件描述符
有名管道
特点
使用步骤