进程间通讯(一)管道
来源:互联网 发布:taft地震波数据下载 编辑:程序博客网 时间:2024/06/08 06:17
进程间通讯:多个进程之间数据交换。
进程间通讯方式:信号、管道、信号量、消息队列、共享内存、套接字(socket)
进程创建:pid_t fork
进程间数据共享问题:
全局变量、堆、栈 不共享
文件 共享
按照信号传送方向与时间的关系,数据通信可以分为三种类型:单工通信、半双工通信、全双工通信。
单工通信:信号只能向一个方向传输,任何时候都不能改变信号的传送方向。
半双工通信:信号可以双向传递,但是必须是交替进行,一个时间只能向一个方向传送。
全双工通信:信号可以同时双向传递。
管道在同一时刻只能是半双工通信。
有名管道:在文件目录树中有一个文件标示(管道文件),实际不占磁盘空间,数据缓存在内存上。
应用于任意两个进程之间数据的单向传递。
具体操作
创建:(命令方式)mkfifo (函数方式)mkfifo()
打开: open
写数据: write
读数据: read
关闭: close
maina.c文件
mainb.c文件
阻塞运行函数:函数调用以后并不会立即返回,需要等待某些条件的发生才会返回。例如open操作管道文件时,阻塞运行的函数。
如果一个进程以只写方式打开一个管道文件时,open会阻塞运行,直到有一个进程以只读方式打开管道,open才会返回,程序才会接着运行。
read函数也会阻塞运行,直到写端写入数据或者所有写端都关闭。read读取数据会将内存上的数据清空。
无名管道:相对于有名管道而言,无名管道在使用时产生,不使用后释放,并不会在系统上留下任何蛛丝马迹。
无名管道因其在使用前没有任何的标示,所以它只能应用于父子进程之间。
ps:管道都是半双工通信,而无名管道创建后,父进程在fork产生子进程后,两进程分别有一对读写端。
fork之后,要么子进程关闭读端父进程关闭写端,要么子进程关闭写端父进程关闭读端。
- 进程间通讯(一) 有名管道
- 进程间通讯(一)管道
- delphi 进程间通讯(管道通讯)
- 进程间通讯--管道
- 进程间通讯:管道
- 进程间通讯--管道
- 进程间通讯(二)--管道
- 进程间的通讯方式_管道(有名管道)
- 进程间通讯——管道(有名管道)
- 进程间的通讯方式_管道(无名管道)
- 进程间通讯(一)IPC之管道FIFO
- Linux进程间通讯一--无名管道PIPE
- Linux进程间通讯--管道(有名管道
- 管道实现进程间通讯
- 管道实现进程间通讯
- 管道实现进程间通讯
- 进程间通讯---匿名管道
- linux进程间通讯--管道
- 学习密码学
- 微信开发之消息模板
- 判断字母顺序的问题,如AB...Z AA AB... ZZ这种如何判断
- ubuntu云服务器搭建jdk+mysql+tomcat
- keras框架
- 进程间通讯(一)管道
- nginx 支持thinkphp设置
- java.lang.ExceptionInInitializerError的原因
- AspectCore.Extension.Reflection : .NET Core反射扩展库
- spring cloud+dotnet core搭建微服务架构:配置中心续(五)
- Android自定义控件drawText的baseline的问题
- 解析各类文件--cookbook读书笔记
- 开发笔记——前端优化
- 整理springdata mongodb 查询 一