进程通信方式-管道pipe

管道是两个进程间进行单向通信的机制。因为管道传递数据的单向性,管道又称之为半双工管道。

1、数据只能从一个进程流向另一个进程(其中一个写管道,另一个读管道);如果要进行全双工通信,需要建立两个管道。

2、管道只能用于父子进程或者兄弟进程间的通信,也就是说管道只能用于具有亲缘关系的进程间的通信,无亲缘关系的进程不能使用管道。

除了以上局限性,管道还有其他一些不足,如管道没有名字,管道的缓冲区大小是受限制的,管道所传送的是无格式的字节流。

这就要求管道的输入方和输出方事先约定好数据的格式。

虽然有这么多的不足,但对一些简单的进程间的通信,管道还是完全可以胜任的。

使用管道进行通信时,两端的进程向管道读写数据是通过创建管道时,系统设置的文件描述符进行的。

因此对于管道两端的进程来说,管道就是一个特殊的文件,这个文件只存在于内存中。

在创建管道时,系统为管道分配一个页面作为数据缓存区,进行管道通信的两个进程通过读写这个缓冲区来进行通信。

通过管道通信的两个进程,一个进程向管道写数据,另外一个进程从管道的另一端读数据。写入的数据每次都添加在管道缓冲区的末尾,

读数据的时候都是从缓冲区的头部读出数据。

时间: 2024-09-28 06:41:07

进程通信方式-管道pipe的相关文章

进程通信----管道(pipe)

 Linux管道的实现机制 在Linux中,管道是一种使用非常频繁的通信机制.从本质上说,管道也是一种文件,但它又和一般的文件有所不同,管道可以克服使用文件进行通信的两个问题,具体表现为: ·      限制管道的大小.实际上,管道是一个固定大小的缓冲区.在Linux中,该缓冲区的大小为1页,即4K字节,使得它的大小不象文件那样不加检验地增长.使用单个固定缓冲区也会带来问题,比如在写管道时可能变满,当这种情况发生时,随后对管道的write()调用将默认地被阻塞,等待某些数据被读取,以便腾出足够的

Linux下的进程通信方式(IPC)——管道通信

Unix IPC: 管道.命名管道(FIFO)      管道 1.概念 管道是单向的(半双工).先进先出.无结构的字节流,它把一个进程的输出和另一个进程的输入连接在一起. 写进程在管道的尾端写入数据,读进程在管道的首端读出数据.数据读出后将从管道中移走,其它读进程都不能再读到这些数据. 管道提供了简单的流控制机制.进程试图读一个空管道时,在数据写入管道前,进程将一直阻塞.同样,管道已经满时,进程再试图写管道,在其它进程从管道中读走数据之前,写进程将一直阻塞. 2.管道的特点 (1)单向数据通信

Linux简单程序实例(GNU工具链,进程,线程,无名管道pipe,基于fd的文件操作,信号,scoket)

一, GNU工具链简介: (1)编译代码步骤: 预处理 -> 编译 -> 汇编 -> 链接: 预处理:去掉注释,进行宏替换,头文件包含等工作: gcc -E test.c -o test.i 编译:   不同平台使用汇编语言不同,汇编将高级语言编译成汇编语言: gcc -S test.c -o test.s 汇编:   将汇编语言翻译成二进制代码: gcc -c test.c -o test.o 链接:   包含各函数库的入口,得到可执行文件: gcc -o test test.c (2

【IPC进程间通讯之二】管道Pipe

IPC进程间通信+管道Pipe         IPC(Inter-Process Communication,进程间通信).         管道用于进程间共享数据,其实质是共享内存,常用IPC之一.管道不仅可以用于本机进程间通信,还可实现跨网络进程间通信,如同Socket通信,管道同样封装计算机底层网络实现,提供一个良好的API接口.                1.管道(Pipe):        管道分为匿名管道和命名管道.        匿名管道只能用于父子进程间通信 ,不能跨网络通

Python--线程队列(queue)、multiprocessing模块(进程对列Queue、管道(pipe)、进程池)、协程

队列(queue) 队列只在多线程里有意义,是一种线程安全的数据结构. get与put方法 ''' 创建一个"队列"对象 import queue q = queue.Queue(maxsize = 10) queue.Queue类即是一个队列的同步实现.队列长度可为无限或者有限.可通过Queue的构造函数的可选参数maxsize来设定队列长度.如果maxsize小于1就表示队列长度无限. 将一个值放入队列中: q.put() 调用队列对象的put()方法在队尾插入一个项目.put()

Linux进程通信——管道

进程间通信(IPC:Inner Proceeding Communication) 进程是操作系统实现程序独占系统运行的假象的方法,是对处理器.主存.I/O设备的抽象表示.每个进程都是一个独立的资源管理单元,每个进程所看到的是自己独占使用系统的假象,因此各个进程之间是不能够直接的访问对方进程的资源的,不同的进程之间进行信息交互需要借助操作系统提供的特殊的进程通信机制. 进程之间的通信,从物理上分,可以分为同主机的进程之间的通信和不同主机间的进程之间的通信.从通信内容方式上分,可以分为数据交互.同

进程间通信IPC—匿名管道(pipe)和命名管道(fifo)

管道内部如何实现-大小,组织方式,环形队列? 一.进程间通信有多种方式,本文主要讲解对管道的理解.管道分为匿名管道和命名管道. (1)管道( pipe ):又称匿名管道.是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用.进程的亲缘关系通常是指父子进程关系. (2)命名管道 (named pipe或FIFO) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信. 二.管道 1. 管道的特点: (1)管道是半双工的,数据只能向一个方向流动:双方通信时,需要

进程-IPC 管道 (一)

详见:https://github.com/ZhangzheBJUT/linux/blob/master/IPC(%E4%B8%80).md 一 IPC 概述 进程间通信就是在不同进程之间传播或交换信息,那么不同进程之间存在着什么两方都能够訪问的介质呢?进程的用户空间是互相独立的,一般而言是不能互相訪问的,唯一的例外是共享内存区.系统空间是"公共场所".所以内核显然能够提供这种条件,例如以下图所看到的. 除此以外,那就是两方都能够訪问的外设了.两个进程能够通过磁盘上的普通文件交换信息.

进程间通信(4) - 管道(pipe)

1. 前言 本篇文章的所有例子,基于RHEL6.5平台.本篇只介绍管道(匿名管道/普通管道),命名管道在后续文章中会介绍. 2.管道特性 管道是Linux支持的最初Unix IPC形式之一,具有以下特点: **管道是半双工的,数据只能向一个方向流动,一端输入,另一端输出.需要双方通信时,需要建立起两个管道. **管道分为普通管道和命名管道.普通管道位于内存,只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程).命名管道位于文件系统,没有亲缘关系的进程间只要知道管道名也可以通讯. **管道也是文