进程间通信
何为通信?就是进程间传播交换信息
?进程通信的目的
答:1)数据的传输:A进程发送数据给B进程
2)共享数据
3)通知事件:A进程通知B进程某事件发生了
4)资源共享:多进程共享同一资源Ex:打印机
5)进程控制
进程间通信的主要方法有:管道、共享内存、信号、信号量、套接字
不同操作系统有其自己独特的特点,因而根据操作系统的不同,通信方式也不同:
Windows操作系统进程间通信方式————
1)文件映射
把磁盘上的文件内容当做进程地址区间一块内存来对待,因此进程不必使用I/O操作,通过使用指针即可操作文件
Windows OS 允许多个进程访问同一映射文件,各进程在各自的地址空间内接收内存指针,通过该指针不同进程即可读、修改文件内容,实现对文件数据的共享
该方法仅限于本地进程
2)共享内存
相当于malloc一块内存空间,两个进程都可以通过指针访问到这块内存中的数据,一个进程对数据的修改另一个进程也能感知到
3)匿名管道
端到端的一种通信,可以是全双工也可以是半双工,限于父子进程或同一父进程的两个子进程间的通信,且数据为字节流
匿名管道通常用来I/O重定向,不能用于网络通信,也不能用于两个不相关子进程
4)命名管道
Server-Client间单向或双向的通信
不同于匿名管道的是它可以实现两个不相关进程、两台计算机之间
服务器创建一个管道并为之命名,任何进程都可以通过该名字打开这个管道实现通信
命名管道提供简单接口,通过网络传输给另一个进程,但不能用于多进程通信
5)动态链接库DLL
多个进程通过链接到同一个DLL,使用同一个DLL的数据就达到了通信的目的
6)套接字SOCKET
应用于网络通信
其实现相对底层,所以反而将单机上进程间的通信搞得很复杂,适得其反的感觉
Linux OS进程间通信————
1)管道
2)信号:用于通知进程某事情发生
3)信号量:进程间、同一进程下不同线程间同步
4)消息队列:克服了信号承载信息少,管道只能承载无格式的字节流及缓冲区大小有限的缺点
5)套接字:不同机器间通信
6)共享内存