要是想让两个进程之间通信,就是想尽一切办法,让两个进程能够看到同一份资源(内存)。
其中内存的提供是通过文件的方式就叫做 管道,如果绕过文件那么就到做 system V
进程间通信介绍
- 数据传输:一个进程需要将它的数据发送给另一个进程
- 资源共享:多个进程之间共享同样的资源。
- 通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。
- 进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。
1. 管道
管道是Unix中最古老的进程间通信的形式。我们把从一个进程连接到另一个进程的一个数据流称为一个“管道”。
在Linux下可以认定为一切皆文件,那么管道也是一个文件。

1.1 匿名管道
匿名管道特点:
- 只能用于具有共同祖先的进程(具有亲缘关系的进程)之间进行通信;通常,一个管道由一个进程创建,然后该进程调用fork,此后父、子进程之间就可应用该管道。
- 管道提供流式服务
- 一般而言,进程退出,管道释放,所以管道的生命周期随进程
- 一般而言,内核会对管道操作进行同步与互斥(互斥可以对数据进行保护)
- 管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道
#include <unistd.h>
功能:创建- - -匿名管道
原型:int pipe(int pipefd[2]); 数组传参会发生降维,这里就其实传的是一个指针
参数fd:文件描述符数组,其中pipefd[0]表示读端, pipefd[1]表示写端
返回值:成功返回0,失败返回错误代码

#include<stdio.h>
2 #include<unistd.h>
3 #include<string.h>
4
5 int main()
6 {
7 int pipefd[2] = {
0};
8
9 pipe(pipefd);
10
11 pid_t id

本文探讨了进程间通信的两种方式:匿名管道和命名管道,以及System V共享内存,包括ftok函数和关键操作。介绍了如何通过管道进行数据流和资源共享,以及如何利用System V实现高效同步与互斥。
最低0.47元/天 解锁文章
7466

被折叠的 条评论
为什么被折叠?



