进程之间的通信———管道
来源:互联网 发布:linux 查看权限 编辑:程序博客网 时间:2024/06/17 23:42
一:管道的基本概念:
进程之间的通信的本质是让不同的进程看到一份公共的资源(有内核提供)。而管道是一种最基本的IPC机制,又pipe函数创建。
调用pipe函数时在内核中开辟一块缓冲区(称为管道),它有一个读端一个写段,然后通过fileds参数传出给用户程序两个文件描述符,fileds[0]指向管道的读端,fileds[1]指向管道的写端。
管道通信的特点:
1,管道只能进行单向通信。
2,管道只能够用于进行具有血缘关系的进程之间进行进程间通信,常用于父子。
3,管道内部自带同步机制。
4,管道在进行通信的时候我们一般而言,管道对外界提供的服务叫做面向字节流的通信。
5,当其管道与之相应的进程退出时,管道也随之释放,我们把管道的生命周期叫做随进程。
管道之间进行通信的程序:
用图来说明上段代码:
但是管道存在四种情况:(1)如果写端不写了,但是不管端口,那么读端就会等着(2)如果写端一直写,读端不读,那么当写满之后就会停止不写,直到读端读了数据(3)如果只读不写,当读端读完数据也会等着(4)如果读端关了,一直写的话是无效的,因为操作系统会关掉管道。其中2和3两种情况说明管道自带同步。
多个执行流访问同一份资源叫做临界资源,访问公共资源的那份代码叫做临界区。
互斥:在任意一个时候,只能有一个人访问临界区,操作临界资源,一般而言,互斥都是采用原子性状态进行访问,但是又有一个优先级问题,所以一个进程长时间去申请某个资源,但是因为某个场景下,该进程长时间得不到满足就会导致该进程出现饥饿问题。
二:命名管道
命名管道是一个设备文件,所以即使是没有血缘关系的两个进程之间也可以通过命名管道进程通信。
linux下有两种方式创建命名管道,一种是在shell下交互地建立一个命名管道,二是在程序中使用系统函数建立命名管道。Shell方式下可以使用mknod或mkfifo命令,下面命令使用mknod创建一个命名管道:mknod namedpipe
- 进程之间的通信———管道
- 进程之间的通信--管道
- 进程间的通信—管道
- 进程通信——管道
- 进程间通信—管道
- 进程间通信—管道
- 进程通信—命名管道
- 进程间通信—管道
- 进程通信——管道的通信方式
- 进程间通信——管道通信
- 进程通信——管道通信
- 进程间通信——管道通信
- 进程通信1——管道通信
- linux 进程通信—管道通信
- [Linux]进程之间的管道通信
- 进程之间的通信-命名管道
- linux下父子进程间的通信——管道
- 一种网络进程间通信的方式—— 管道
- 图片上传至Web项目下指定文件夹,需刷新项目下文件夹才能显示(已解决)
- 递归和迭代的区别
- c++ void*的小作用
- 551. Student Attendance Record I
- html/css文字超出隐藏写法、省略号
- 进程之间的通信———管道
- mongodb用户管理与权限配置
- USB协议架构及驱动架构
- react native 无法reload调试
- centos7只有lo网卡的解决方法
- 正则匹配
- 1782: [Usaco2010 Feb]slowdown 慢慢游
- [iuud8]cocos2dx-Lua之display
- python 将Excel文件转csv