进程间通信目的:
- 数据传输:一个进程需要将它的数据发送给另一个进程。
- 资源共享:多个进程之间共享同样的资源。
- 通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件,(如进程终止时要通知父进程)。
- 进程控制:有些进程希望完全控制另一个进程的执行,此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。
进程间通信本质:
让两个或多个毫不相关的进程看到同一份公共资源。
管道概念:
从一个进程连接到另一个进程的一个数据流称为一个管道。
管道分类:
- 匿名管道
- 命名管道
匿名管道:
- 函数原型:
- 函数参数及返回值:
fd:函数描述符数组。其中fd[0]表示读端,fd[1]表示写端。
返回值:成功返回0,失败返回错误代码。
- 实例:
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
int main(){
int fds[2];
char buf[100];
int len;
if(pipe(fds) == -1){
perror("make pipe");
exit(1);
}
//read from stdin
while(fgets(buf,100,stdin)){
len = strlen(buf);
//write into pipe
if(write(fds[1],buf,len) != len){
perror("write to pipe");
break;
}
memset(buf,0,sizeof(buf));
//read from pipe