进程间通信——管道文件
来源:互联网 发布:厦门大学网络教育收费 编辑:程序博客网 时间:2024/05/16 19:39
一、进程间通讯
1、概念:
每个进程各自有不同的进程地址空间,任何一个进程的全局变量在另一个进程中都不能访问,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,P1进程把要交换的数据从用户空间拷到内核缓冲区,P2进程再从内核缓冲区把数据读走。如下图所示。内核提供的这种机制称为进程间通信(IPC,InterProcess Communication )
2、方式
能够实现进程间通信的方法有:管道、信号量、消息队列、共享内存、socket
二、管道
管道是数据交换的通道、桥梁。管道允许在进程之间按先进先出的方式传送文件,是进程间通信的一种常见的方式。
1、管道分为 FIFO有名管道(文件)和 pipe无名管道
无名管道:用于相关进程(拥有一个共同的创建了它们的祖先进程)之间的通信,如父子进程。
有名管道:可以应用于任何进程之间。
三、有名管道
1、有名管道(文件):是一种特殊的文件,管道文件仅仅在文件系统目录树中存在的一个标示,并不需要存储 数据,不在磁盘占据空间(在磁盘上有对应的节点,但没有数据块,也就是说只是拥有一个名字和相应的访问权 限);当使用管道文件进行进程间通信时,在内存中开辟空间供使用;
2、管道文件的创建及操作
(1)创建管道文件命令: mkfifo filename
代码中创建管道文件的函数: mkfifo();
(2) open:打开管道
read:读管道内容
write:向管道发送数据
close:关闭管道
3、注意:(1)有名管道,如果一个进程以只写打开,进程会在open阻塞运行,直到另一个进程以只读打开; 同理如果一个进程以只读打开,进程也会在open阻塞运行,直到另一个进程以只写打开;因此,当管道文件同时以读、写方式打开才有意义!
(2)read端会阻塞运行,直到写端写入数据或者写端关闭。
四、无名管道
1、无名管道:仅能应用于相关进程之间,不存在管道文件,实现依赖父子进程文件共享;
2、无名管道的创建:int pipe(int fd[2])函数 // fd[0]为读端,fd[1]为写端;
建立无名管道用pipe函数,一个管道就如一个打开的文件,主要包括2个file结构——分别用于读和写
3、无名管道操作时,建立无名管道用pipe函数。管道操作分为以下步骤:
(1)父进程调用pipe函数开辟管道,得到两个文件描述符指向管道的两端;
(2)父进程用fork创建子进程,那么子进程也有两个文件描述符指向同一管道;
(3)父进程关闭管道文件读端,子进程关闭写端。父进程可以往管道里写数据,子进程可以从管道中读数据,这样就在父子进程之间建立管道,实现进程间通信。
- 进程间通信——管道文件
- 进程间通信—管道
- 进程间通信—管道
- 进程间通信—管道
- 进程间通信——管道通信
- 进程间通信——管道通信
- Windows进程间通信——管道
- 进程间通信——管道(Pipe)
- Linux进程间通信——管道
- 进程间通信——匿名管道
- Linux进程间通信——管道
- Linux进程间通信——管道
- 进程间通信——管道
- 进程间通信——管道
- 进程间通信——管道
- 进程间通信——管道
- 进程间通信——管道
- 进程间通信 ——管道
- UWP中将int类型的变量绑定到TextBlock的Text属性
- # activity相关
- Redis的持久化
- 每天一点C语言--竖式问题
- 移动硬盘安装grub2引导winpe,以后不需要格式化整个移动硬盘(本例移动硬盘亦可用u盘代替)
- 进程间通信——管道文件
- 2017秋招究竟有多烈
- Jupyter Notebook 快捷键
- Javascript Dom编程艺术读书笔记(一)
- Java 异常Exception e中e的getMessage()和toString()方法的区别
- JSP传参乱码,万恶的全角字符
- iOS NSString转NSDate
- centos7安装docker
- mysql组复制 多数server异常后重新配置集群