进程间通信
进程间通信的目的
数据传输:一个进程需要将他的数据发送给另一个进程
资源共享:多个进程之间共享同样的资源
通知事件:一个进程需要向另一个或一组进程发送消息,通知它发生了某种事件(如进程终止时要通知父进程)
进程控制:有写进程希望完全控制另一个进程的执行,此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够即使知道他们的状态改变。
进程间通信分类
管道:
匿名管道
命名管道
System V IPC:
System V 消息队列
System V 共享内存
System V 信号量
首先我们来介绍下管道
我们把一个进程连接到另一个进程的一个数据流称为管道
匿名管道
#include<unistd.h>
//功能:创建一无名管道
//原型
int pipe(int fd[2]);
//参数 fd:文件描述符数组,其中fd[0]表示读端,fd[1]表示写端
//返回值:成功返回0;失败返回错误代码
站在文件描述符角度-深度理解管道
接下来父进程fork出子进程然后让父进程关闭fd[0].子进程关闭fd[1]
我们可以看到父进程写入的东西被子进程读到了