进程间通信:
我们可以直观的理解成让两个进程进行通信。
也可以这样理解: 两个不同的进程看到同一份公共的资源。
为什么进程间要通信呢?
1数据传输:一个进程需要把数据发送给另一个进程
2.资源共享:多个进程之间共享同样的资源
3.通知进程:一个进程需要向另一个或另一组进程发送信息,通知他们某时间(比如说我们的子进程退出要通知父进程)
下来我们就来说说用管道实现进程通信的方法
1.匿名管道
这就是匿名管道的实现:https://github.com/Amour132/Anonymous-Pipe/blob/master/mypipe/mypipe.c
父进程创建出管道然后创建子进程,因为父子进程的代码是共享的所以他们都可以看到管道
然后通过文件描述符的控制达到一个读一个写,这样就能实现进程间通信
匿名管道的特点:
1.应用于有血缘关系的进程,常用于父子进程
2.只能单向通信
3.当相关进程退出时,管道也会退出,生命周期随进程
4.管道时面向字节流的。
匿名管道只能用于有血缘关系的进程,那么如果两个进程没有血缘关系呢?我们怎么进行进程间通信?
命名管道就产生了
命名管道:https://github.com/Amour132/name-pipes/tree/master/myname-pipes
我们用命令mkfifo + filename自己创建出一个文件
然后我们就会发现我们多了一个管道文件,然后我们就可以控制两个进程通过系统调用open去打开然后进行我们的操作
需要注意的是命名管道也是单向性的。