首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux进程通信——管道

管道 进程通信概念 管道 匿名管道 创建匿名管道的过程 管道读写的特性 管道本身的特征 基于管道的进程池设计 命名管道 让两个无血缘关系的进程通信 进程通信概念 什么是进程通信 首先我们清楚,进程是具有独立性的...我们把从一个进程连接到另一个进程的一个数据流称为一个“管道”。 管道是基于文件系统的。 那么两个进程通信: 第一个条件就是操作系统需要给双方进程提供内存空间。...那么我们如何让两个进程看到同一个管道文件呢? 首先清除fork是创建子进程的,子进程会继承父进程的文件地址,这样就能看到同一份管道文件了,但是这个文件并没有名字,所以叫做匿名管道。...这种通信,称之为管道通信。 这个过程其实就相当于父进程通过操作系统写给管道,也就是相当于写给操作系统,然后子进程通过操作系统从管道当中读取内容。...管道本身的特征 1.管道的生命周期是进程的生命周期 2.管道可以用来进行具有血缘关系的进程之间进行通信,常用于父子通信。

4K70

Linux进程通信 管道

(2)管道只能在具有公共祖先的两个进程之间使用。通常,一个管道由一个进程创建,在进程调用fork后,这个管道就能在父进程和子进程之间使用了。(FIFO无此局限)。       ...--《Unix环境高级编程》 通俗理解: Linux的管道通信,通讯方式正如其名一样,如同一个大管道,一端流入,一端流出。...PIPE PIPE是一种半双工管道,其中,fd[1]用来向管道写入数据,fd[0]用来从管道读出数据。若两个进程需要利用PIPE通信,就要保证一个进程使用fd[0],另一个进程使用fd[1]。...即在父进程向管道写入终端输入的 “HelloWorld”,然后在子进程读取管道数据,并在终端输出。...FIFO FIFO有时也会被称为命名管道,未命名的管道(PIPE)只能在两个相关的进程间使用,而且这个两个进程还要有共同的创建了它们的祖先进程。但是,通过FIFO,不相关的进程也能进行数据交换。

3.1K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【Linux】进程间通信——管道

    ,父进程以读写打开,子进程也是以读写打开(一般而言,管道只用来进行单向数据通信);关闭父子进程不需要的文件描述符,完成通信: 管道分为匿名管道和命名管道 2.2匿名管道 我们通过文件名区分文件,但是如果当前进程的文件没有名字...让两个进程看到同一个文件,通过父进程创建子进程,子进程继承文件地址的方式,看到同一个内存级文件,此时内存级文件没有名称就是匿名管道了。匿名管道能用来父进程和子进程之间进行进程间通信。...: 1.读快写慢 子进程休眠时,不在写入,父进程在读取(如果管道中没有数据,读端在读,此时默认会直接阻塞当前正在读取的进程) 2.读慢写快 拿着管道读端不读,写端一直在写:写端往管道里写,而管道是有大小的...; } } close(rfd); removeFifo(NAMED_PIPE); return 0; } 进行通信: 读端多出一行空行:写端输入之后多按了回车...我们从进程间通信开始介绍,而后进入了进程间通信——管道这部分,管道又分为匿名管道和命名管道,以及之间的区别,匿名管道需要具有血缘关系的进程,而命名管道则不需要,同时,匿名管道通过子进程继承文件地址的方式

    23240

    Linux进程通信——有名管道

    管道(pipe)是无名管道,他是进程资源的一部分,随着进程的结束而消失。并且它只能在拥有公共祖先进程的进程内通信。而有名管道(FIFO)的出现则解决了这个问题。FIFO提供了一个路径名与它关联。...Linux下建立有名管道的函数是mkfifo。...管道这个名字是非常形象的,一个管道必须有两端(就是在一个进程中必须读,另一个进程必须写),只有这样,才能正常操作,否则进程将会阻塞。例如下面这样。...或者说,这也体现了进程的并发行,管子有了一端以后,还必须有另一端,这才能构成管道。 测试一下,FIFO用于两个无关进程直接的通信。首先建立我们有两个进程,一个是test1,另一个是test2....通信过程中,读进程退出后,写进程向命名管道内写数据时,写进程也会退出。

    3.3K30

    【Linux】进程通信之管道

    在Linux中使用管道 首先,学过Linux命令的话,大家对于管道肯定不陌生, Linux管道使用竖线 | 连接多个命令,这个被称为管道符。...另外,通过管道符 | 创建的管道是匿名管道,用完了就会被自动销毁。需要注意的是,匿名管道只能在具有亲缘关系(父子进程,兄弟进程,爷孙进程)的进程间使用。也就是说,匿名管道只能用于亲缘进程之间的通信。...当然也可以关闭父进程对管道文件的写方式,以及子进程对管道文件的读方式,这样管道文件就成为了一个由子进程写入数据,父进程读取数据的通信管道文件。...编码实现父子进程通信管道 管道的实现思路如下: 创建管道 创建子进程, 子进程关闭读端, 然后开始向管道写入数据 父进程关闭写端,然后开始向管道读数据 读取完毕,父子进程关闭自己所使用的写...将保证写入的原子性 当要写入的数据量大于PIPE_BUF时,linux将不再保证写入的原子性 管道特点 管道的特点: 只能用于具有共同祖先的进程(具有亲缘关系的进程)之间进行通信;

    13610

    【Linux】IPC 进程间通信(一):管道(匿名管道&命名管道)

    父进程向以写方式打开的文件的管道文件写入,子进程再从以读方式打开的文件的管道文件读取,从而实现管道通信。如果是要子进程向父进程传输数据,同理即可。...(多执行流执行代码的时候,具有明显的顺序性) 管道文件在通信的时候,是面向字节流的。...管道通信的场景 - 进程池 父进程创建多个子进程,并为每个子进程创建一个管道文件,父进程为写端,子进程为读端。父进程给子进程通过管道传输任务,这就是进程池。...命名管道是一种特殊类型的文件(命名管道 -- > mkfifo) 4.2 创建命名管道 Linux系统中,使用 mkfifo 命令创建有名管道文件,再使用两个进程打开即可 $ mkfifo filename...如下图: Linux 系统编程中使用 mkfifo 函数创建一个管道文件,再让两个不相关的进程打开: int mkfifo(const char *pathname, mode_t mode); 参数

    13810

    【Linux】Linux管道揭秘:匿名管道如何连接进程世界

    1.什么是管道 ? 管道(Pipe)是一种常见的进程间通信(IPC,Inter-Process Communication)机制,在 Unix/Linux 系统中尤其重要。...管道在 Unix/Linux 系统中提供了一种简便的机制,允许数据在不同进程之间传递。它提供了一个缓冲区,数据写入管道的一端(写端),然后可以从另一端(读端)读取。...管道的本质是一种半双工的通信机制,即数据只能沿一个方向流动。 提问:有没有一些直观的管道的利用? 当然。其实早在Linux的指令学习中,我们就已经接触到了管道。就是这个符号|。...,我们都知道,在大部分Linux的指令都是一个可执行文件,运行起来就是一个进程。...2.1.7 站在内核角度-管道的本质 Linux下一切皆文件. 所以我们也应该用看待文件的眼观,去理解管道。 我们可以将管道(Pipe)理解为一种特殊类型的文件。

    11020

    【Linux】————进程间通信(匿名管道)

    ) 进程控制:有些进程完全控制另一些进程的执行,此时控制进程希望能拦截另一个进程的所有陷入和异常,并能够即使知道他们的状态改变 进程间通信的发展 管道 System V进程间通信 POSIX进程间通信...,所有进程的通信会有不同的种类 进程间通信分类 管道: 匿名管道 pipe管道 System V IPC System V 消息队列 System V 共享内存 System V 信号量 POSIX...如果此时有创建了子进程,子进程会继承父进程的文件描述表,指向同一个文件,我们把上面分子进程都看到的文件,叫做管道文件,管道只允许单向通信,管道里的内容不需要刷新的磁盘。...返回值:成功返回0,失败返回错误代码 匿名管道的特性 面向字节流 用来进行具有血缘关系的进程,进行进程间通信(IPC) 文件的生命周期,随进程!管道也是!...(同步互斥就是指对于同一个管道,同一时刻只允许一个进程或者线程进行操作,对于保证管道的正确性和稳定性都非常重要它使得多个进程或者线程在有序安全的前提下去利用管道进行有效的数据传输和通信) 使用管道通信的

    10810

    Linux之进程间通信——管道

    前言 管道是Linux中最古老的进程间通信的方式,本文介绍了进程间通信的相关概念,主要介绍了匿名管道和命名管道。 一、进程间通信 1.概念 什么是进程间通信?...本文主要介绍的是管道。 二、管道 1.管道介绍 管道是Unix中最古老的进程间通信的方式,我们把连接两个进程的数据流称为“管道”。...父进程创建子进程,子进程继承管道以及对管道的读写 父进程关闭读取端,子进程关闭写入端。自此父进程只能向管道中写入,子进程只能从管道中读取,完成了父子进程的单向通讯。...2.管道分类 管道根据是否具有文件名,分为匿名管道和有名管道。 1.匿名管道 通过父进程创建子进程,子进程继承文件地址的方式,让父子进程看到同一个内存级文件,该内存级文件没有名称,则就称为匿名管道。...本文作者目前也是正在学习Linux相关的知识,如果文章中的内有错误或者不严谨的部分,欢迎大家在评论区指出,也欢迎大家在评论区提问、交流。

    34831

    Linux :进程间通信之管道

    ,导致现在很多Linux发型版本都不一样,即使一样,内部的标准也不一样!        ...因为进程管理和文件系统是两个模块(你能打开我是因为操作系统,你还敢要求这么多??我们是平级!!)    ...管道的使用和文件一致,迎合了“Linux一切皆文件思想”。...5、管道是有固定大小的(Linux中是64KB)且具有原子性,但是在不同的内核里可能有区别   验证管道大小: 最后写到65536说明管道大小是64kb  ulimit 命令用于限制 shell 进程及其所创进程的资源使用...我们一直往管道里写,管道的大小都不会发生变化 问题1:父子进程可以通过继承看到同一个文件,那两个毫不相关的进程,我怎么知道这俩进程打开的是不是同一个文件呢??

    7610

    【Linux】进程间通信——匿名管道

    进程间通信分类 Linux进程间通信可以分为以下几种分类: 匿名管道(Pipe):管道是一种半双工的通信机制,可以在同一个进程中的两个文件描述符之间传递数据。...读进程从管道中读取数据,写进程向管道中写入数据。管道只能在具有父子关系的进程之间使用。   ...匿名管道pipe   在Linux中,匿名管道(anonymous pipe)是一种常用的进程间通信机制。...在Linux系统中,可以使用以下系统调用接口创建匿名管道: #include int pipe(int pipefd[2]); 该函数会创建一个管道,并将相应的读取和写入文件描述符存储在...需要注意的是,创建管道时需要保证父子进程之间的通信,因为管道只能在具有亲缘关系的进程之间使用。通常情况下,我们会调用pipe之后创建子进程,将管道传递给子进程。

    11500

    Linux进程通信之管道解析

    ,下面是在 Linux 端运行命令行的一个截图: ?...如果试图向已经填满的管道写入,系统会自动阻塞。一个管道不能同时被两个进程打开。...那要如何使用管道在两个进程之间通信呢,我们可以使用 fork()创建子进程,创建的子进程会复制父进程的文件描述符,这样就做到了两个进程各有两个fd[0]与fd[1],两个进程就可以通过各自的fd写入和读取同一个管道文件实现进程通信了...image-20210704172243185 命名管道 命名管道又被称之为是 FIFO ,未命名的管道只能在两个相关的进程之间使用,而且这两个相关的进程还要又一个共同创建了他们的祖先进程,但是,通过...综上,也就是命名管道在进程中通信的一个例子。 小结 上述就是本次进程通信中关于管道的相关内容,其中就包括匿名管道以及命名管道,他们之间存在着差别吗,也各有各的应用,本次的分享就到这里啦~ ?

    1.4K10

    【Linux】进程间通信——命名管道

    @TOC 命名管道 匿名管道只能用来进行进程间通信,让具有血缘关系的进程进行通信 让毫不相关的进程之间进行通信,就需要采用命名管道通信 因为该文件有文件名称的,而且必须要有,所以叫做命名管道 1....重定向到显示器中 最终在终端2中显示 hello world 而实际上 输出重定向和输入重定向 的启动都是进程,并且毫不相关 2....命名管道原理 要打开对应的文件,就会在操作系统内创建struct file对象,struct file对象有自己的缓冲区 由于0 1 2 分别被占用,所以3指向struct file对象 若有一个毫不相关的进程...当新创建一个进程时,引用计数就会变成2 此时两个进程指向同一份文件 目的是让两个进程之间进行通信,所以就不应该把数据刷到磁盘上, 应该把磁盘文件改为内存级的,不会进行刷盘,把它命名为管道文件 如何保证两个毫不相关的进程...文件的唯一性,使用路径表示的 让不同的进程通过文件路径+文件名看到同一个文件,并打开,就是看到了同一个资源 3.

    1.9K30

    Linux进程间通信【命名管道】

    :p 管道文件 出自:Linux 权限理解和学习 这个管道文件也非常特殊:大小为 0,从侧面说明 管道文件就是一个纯纯的内存级文件,有自己的上限,出现在文件系统中,只是单纯挂个名而已 可以直接在命令行中使用命名管道...《Linux进程间通信【匿名管道】》 2.1、特点 可以简单总结为: 管道是半双工通信 管道生命随进程而终止 命名管道任意多个进程间通信 管道提供的是流式数据传输服务 管道自带 同步与互斥 机制 2.2...注意: 创建管道文件后,无论先启动读端,还是先启动写端,都要阻塞式的等待另一方进行交互 3.2、实现进程控制 在 Linux 匿名管道 IPC 中,我们实现了一个简易版的进程控制程序,原理是通过多条匿名管道实现父进程对多个子进程执行任务分配...的具体实现可以看看这篇文章 《Linux模拟实现【简易版bash】》 步骤: 创建命名管道 将 bash 改装,打开命名管道文件,作为 读端 创建独立进程,打开命名管道文件,作为 写端 进行 IPC,发送命令给...》 ---- 总结 以上就是本次关于 Linux 进程间通信之命名管道的全部内容了,作为匿名管道的兄弟,命名管道具备匿名管道的大部分特性,使用方法也基本一致,不过二者在创建和打开方式上各有不同:匿名管道简单

    40020

    Linux进程间通信之管道

    2,linux下IPC机制的分类:管道、信号、共享内存、消息队列、信号量、套接字 3,这篇主要说说管道:本质是文件,其他理论什么的网上已经有一大堆了,我就只写一点用法吧。...(2)非命令行:这里又分有名管道和无名管道 编程模型:进程A创建管道(mkfifo) -> 进程A写打开管道(open) -> 进程B读打开管道(open) -> 进程A开始往管道里写数据(write)...->        进程B从管道中读数据(read) -> 进程A关闭管道(close) -> 进程B关闭管道(close) -> 删除管道(unlink) 有名管道(实例): 进程A: #include...2,linux下IPC机制的分类:管道、信号、共享内存、消息队列、信号量、套接字 3,这篇主要说说管道:本质是文件,其他理论什么的网上已经有一大堆了,我就只写一点用法吧。...编程模型:进程A创建管道(mkfifo) -> 进程A写打开管道(open) -> 进程B读打开管道(open) -> 进程A开始往管道里写数据(write) ->        进程B从管道中读数据

    2.6K80

    Linux 的进程间通信:管道

    微博ID:orroz 微信公众号:Linux系统技术 前言 管道是UNIX环境中历史最悠久的进程间通信方式。本文主要说明在Linux环境上如何使用管道。...实际上管道的设计也是遵循UNIX的“一切皆文件”设计原则的,它本质上就是一个文件。Linux系统直接把管道实现成了一种文件系统,借助VFS给应用程序提供操作接口。...虽然实现形态上是文件,但是管道本身并不占用磁盘或者其他外部存储的空间。在Linux的实现上,它占用的是内存空间。所以,Linux上的管道就是一个操作方式为文件的内存缓冲区。...管道的分类和使用 Linux上的管道分两种类型: 匿名管道 命名管道 这两种管道也叫做有名或无名管道。匿名管道最常见的形态就是我们在shell操作中最常用的”|”。...这就是命名管道。 Linux系统无论对于命名管道和匿名管道,底层都用的是同一种文件系统的操作行为,这种文件系统叫pipefs。

    8.4K21

    【Linux】进程间通信——命名管道

    命名管道介绍   匿名管道应用的一个限制就是只能在具有共同祖先(具有亲缘关系)的进程间通信。如果我们想在不相关的进程之间交换数据,可以使用命名管道来做这项工作。   ...在Linux系统中,命名管道(也称为FIFO,First In First Out)是一种特殊的文件类型,它允许进程间进行通信。...与匿名管道不同,命名管道存在于文件系统中,并且可以被任何有适当权限的进程访问。命名管道提供了一种方法,使得不相关的进程能够通过预先定义好的路径来交换数据。 2....> /path/to/your/fifo 需要注意的是,如果此时没有其他进程正在读取该命名管道,则上述命令将会阻塞,直到有读者出现。 从命名管道读取数据 另一个进程可以从命名管道中读取数据。...删除命名管道 一旦不再需要命名管道,可以直接使用rm命令删除它: rm /path/to/your/fifo 记住,命名管道必须在没有任何进程打开的情况下才能被成功删除。

    13710

    图解 | Linux进程通信 - 管道实现

    本文主要介绍 管道 的原理与实现。 一、管道的使用 管道 一般用于父子进程之间相互通信,一般的用法如下: 父进程使用 pipe 系统调用创建一个管道。...前面介绍了 管道(pipe) 的使用,接下来将会介绍管道在内核中的实现方式。 本文使用 Linux-2.6.23 内核作为分析对象。 1....如下图所示: 在 Linux 内核中,使用了 16 个内存页作为环形缓冲区,所以这个环形缓冲区的大小为 64KB(16 * 4KB)。...管道对象 在 Linux 内核中,管道使用 pipe_inode_info 对象来进行管理。...readers:表示正在读取管道的进程数。 writers:表示正在写入管道的进程数。 waiting_writers:表示等待管道可写的进程数。 inode:与管道关联的 inode 对象。

    4.1K52

    Linux进程间通信——匿名管道

    因为Linux一开始就是从这儿借鉴的。加上Linux从一开始就遵守POSIX标准。...这样将进程之间的通信不仅仅限制在单机内。Linux继承了这些。...资源共享 进程控制:一个进程控制另外一个进程的执行(例如debug程序)。它希望知道另一个进程的实时状态。 Linux进程通信方式: 管道:管道(pipe)分为无名管道和有名管道。...写入的内容每次都添加到管道缓冲区的末尾,并且每次都是从缓冲区的头部读取数据。 Linux建立无名管道函数是pipe函数。它需要的头文件是#include....管道文件有大小限制的,在我现在的内核版本下他是4KB。管道文件的大小由PIPE_BUF描述。它在#includelinux/limits.h>这个头文件中给出。

    1.5K10
    领券