几种进程间通信方式:
1:管道:管道是一种半双工的通信方式,数据只能单向流动,而且只能具有亲缘关系的进程间使用。进程的亲缘关系通常指的是父子进程关系。
#include<unistd.h>
int pipe(int file_descriptor[2])
这里使用的是文件描述符而不是文件流。所以我们必须用底层的read和write调用来访问数据,而不是使用文件流库函数fread和fwrite。
一对文件描述符,只能保证父子进程间一个方向的数据传输,父进程和子进程必须有一个关闭file_descriptor[0],另一个关闭file_descriptor[1]。
2:信号量:信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。
程序对共享资源的访问,仅是程序代码很短的一段,但是这段代码可以引发进程之间竟态条件。这段代码称为临界区。
3:消息队列:它提供了一种在两个不相关的进程之间传递数据的方法。相比于命名管道,消息队列的优势在于,它独立于发送和接收进程而存在。
4:信号:信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
5:共享内存:共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的IPC方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。
6:套接字:一种进程间的通信机制。主要用于网络中进程间的通信。当然也可以用于本地进程间通信,如UNIX域。