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

Linux进程通信——管道

管道 进程通信概念 管道 匿名管道 创建匿名管道的过程 管道读写的特性 管道本身的特征 基于管道的进程池设计 命名管道 让两个无血缘关系的进程通信 进程通信概念 什么是进程通信 首先我们清楚,进程是具有独立性的...怎么进行通信 目前通信有两套标准: POSIX——让通信过程可以跨主机 System V——聚焦在本地通信(比较陈旧的标准) 重点:共享内存 管道 管道是Unix中最古老的进程间通信的形式。...就算不是在磁盘当中打开的文件,操作系统也创建一个struct file对象,申请一个缓冲区。...管道本身的特征 1.管道的生命周期是进程的生命周期 2.管道可以用来进行具有血缘关系的进程之间进行通信,常用于父子通信。...命名管道 这个管道用于两个没有血缘关系的进程进行通信。 第一个参数是文件路径+文件名,第二个参数是权限(和创建文件的权限是一个东西)。 成功返回0,失败返回-1.

4K70

Linux进程通信 管道

简介 管道是Unix系统IPC的最古老形式,所有Unix系统都提供这种形式。管道有以下两种局限性: (1)历史上,通信方式为半双工。现在某些系统提供全双工管道。...--《Unix环境高级编程》 通俗理解: Linux管道通信,通讯方式正如其名一样,如同一个大管道,一端流入,一端流出。...半双工通信方式,即只能一端流入另一端流出;全双工通信方式,即一端可以流入也可以流出。 PIPE PIPE是一种半双工管道,其中,fd[1]用来向管道写入数据,fd[0]用来从管道读出数据。...Code: //参考Linux man手册 #include #include #include #include <stdlib.h...PIPE可称为“匿名管道”,无需命名,在具有亲属关系的进程中使用;FIFO又可称为“有名管道”,在使用过程中,其会在系统中创建FIFO类型文件,从而可通过此文件进行不相关进程间的通信通信方式。

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

    Linux】进程通信之匿名管道通信

    操作系统提供的资源不同,就决定了有不同的通信方式。 二、管道通信 2.1、匿名管道通信的原理 基于文件的方式,让不同进程看到同一份资源的通信方式,叫做管道管道通信只能为单向通信。...前面也说过,管道通信为单向通信,所以如果想让父进程写子进程读,就关闭父进程的读端关闭子进程的写端,反之亦然。...2.2、pipe系统调用函数  pipe可以帮我们创建一个不需要向磁盘刷新且磁盘中并不存在的文件,也就是管道。这是一个内存级的文件,是匿名文件或叫匿名管道。...匿名管道只能让具有血缘关系的进程进行进程通信,常用于父子进程之间进行进程通信。...2.3、匿名管道通信的简单实现 #include #include #include #include #include

    15110

    Linux】进程间通信——管道

    比如管道。 1.3进程间通信分类 如何去通信? 答:1.采用标准的做法:System V进程间通信(聚焦在本地通信,如共享内存)、POSIX进程间通信(让通信过程可以跨主机)。...2.采用文件的做法:管道-基于文件系统(匿名管道、命名管道) 而本篇博客主要介绍管道,接着往下看把 ---- 管道 2.1管道介绍 管道是Unix中最古老的进程间通信的形式。...,父进程以读写打开,子进程也是以读写打开(一般而言,管道只用来进行单向数据通信);关闭父子进程不需要的文件描述符,完成通信管道分为匿名管道和命名管道 2.2匿名管道 我们通过文件名区分文件,但是如果当前进程的文件没有名字...,管道释放 2.管道可以用来进行具有血缘关系的进程间通信(常用于父子通信) 3.管道是面向字节流的 4.半双工—单向通信(特殊) 5.互斥与同步机制——对共享资源进行保护的方案 ---- 2.3...我们从进程间通信开始介绍,而后进入了进程间通信——管道这部分,管道又分为匿名管道和命名管道,以及之间的区别,匿名管道需要具有血缘关系的进程,而命名管道则不需要,同时,匿名管道通过子进程继承文件地址的方式

    21040

    Linux进程通信——有名管道

    管道(pipe)是无名管道,他是进程资源的一部分,随着进程的结束而消失。并且它只能在拥有公共祖先进程的进程内通信。而有名管道(FIFO)的出现则解决了这个问题。FIFO提供了一个路径名与它关联。...Linux下建立有名管道的函数是mkfifo。...函数原型: int mkfifo(const char * pathname,mode_t mode); 函数功能:创建一个FIFO文件,用于进程之间的通信。...或者说,这也体现了进程的并发行,管子有了一端以后,还必须有另一端,这才能构成管道。 测试一下,FIFO用于两个无关进程直接的通信。首先建立我们有两个进程,一个是test1,另一个是test2....通信过程中,读进程退出后,写进程向命名管道内写数据时,写进程也会退出。

    3K30

    Linux进程间通信管道

    2,linux下IPC机制的分类:管道、信号、共享内存、消息队列、信号量、套接字 3,这篇主要说说管道:本质是文件,其他理论什么的网上已经有一大堆了,我就只写一点用法吧。...无名管道:适用于父子进程之间的通信      int pipe(int pipefd[2]):该函数在内核中创建管道文件,通过输出参数pipefd返回两个文件描述符,其中pipefd[0]用于读,pipefd...[1]用于写。...2,linux下IPC机制的分类:管道、信号、共享内存、消息队列、信号量、套接字 3,这篇主要说说管道:本质是文件,其他理论什么的网上已经有一大堆了,我就只写一点用法吧。...:适用于父子进程之间的通信      int pipe(int pipefd[2]):该函数在内核中创建管道文件,通过输出参数pipefd返回两个文件描述符,其中pipefd[0]用于读,pipefd[

    2.6K80

    Linux进程通信管道解析

    概述 管道是 UNIX系统 IPC的最古老的形式,所有的UNIX系统都提供此种通信。...,下面是在 Linux 端运行命令行的一个截图: ?...那要如何使用管道在两个进程之间通信呢,我们可以使用 fork()创建子进程,创建的子进程会复制父进程的文件描述符,这样就做到了两个进程各有两个fd[0]与fd[1],两个进程就可以通过各自的fd写入和读取同一个管道文件实现进程通信了...FIFO ,不相关的进程也交换数据。...综上,也就是命名管道在进程中通信的一个例子。 小结 上述就是本次进程通信中关于管道的相关内容,其中就包括匿名管道以及命名管道,他们之间存在着差别,也各有各的应用,本次的分享就到这里啦~ ?

    1.4K10

    Linux 的进程间通信管道

    微博ID:orroz 微信公众号:Linux系统技术 前言 管道是UNIX环境中历史最悠久的进程间通信方式。本文主要说明在Linux环境上如何使用管道。...所以,Linux上的管道就是一个操作方式为文件的内存缓冲区。 管道的分类和使用 Linux上的管道分两种类型: 匿名管道 命名管道 这两种管道也叫做有名或无名管道。...表示这是一个管道文件。有了这个管道文件,系统中就有了对一个管道的全局名称,于是任何两个不相关的进程都可以通过这个管道文件进行通信了。...以上是在使用半双工管道的时候要注意的事情,因为在这种情况下,管道的两端都可能有多个进程进行读写处理。如果再加上线程,则事情可能变得更复杂。实际上,我们在使用管道的时候,并不推荐这样来用。...管道推荐的使用方法是其单工模式:即只有两个进程通信,一个进程只写管道,另一个进程只读管道

    8.3K21

    Linux进程间通信【命名管道

    fd 不一样 所以 命名管道 和 匿名管道 还是有区别的 1.3、命名管道与匿名管道的区别 不同点: 匿名管道只能用于具有血缘关系的进程间通信;而命名管道不讲究,谁都可以用 匿名管道直接通过 pipe...《Linux进程间通信【匿名管道】》 2.1、特点 可以简单总结为: 管道是半双工通信 管道生命随进程而终止 命名管道任意多个进程间通信 管道提供的是流式数据传输服务 管道自带 同步与互斥 机制 2.2...匿名管道用于有血缘关系间 IPC,命名管道也可以 所以我们可以把上一篇文章中的 匿名管道换为命名管道,一样可以实现通信 任务池 Task.hpp #include #include...》 ---- 总结 以上就是本次关于 Linux 进程间通信之命名管道的全部内容了,作为匿名管道的兄弟,命名管道具备匿名管道的大部分特性,使用方法也基本一致,不过二者在创建和打开方式上各有不同:匿名管道简单...,但只能用于具有血缘关系进程间通信,命名管道虽麻烦些,但适用于所有进程间通信场景;在本文的最后,使用命名管道实现了几个简单的小程序,这些小程序的本质都是一样的:创建命名管道 -> 打开命名管道 -> 通信

    30820

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

    @TOC 命名管道 匿名管道只能用来进行进程间通信,让具有血缘关系的进程进行通信 让毫不相关的进程之间进行通信,就需要采用命名管道通信 因为该文件有文件名称的,而且必须要有,所以叫做命名管道 1....struct file对象的地址填入新建立进程对应的下标里 在struct file对象中存在一个引用计数默认为1 ,当新创建一个进程时,引用计数就会变成2 此时两个进程指向同一份文件 目的是让两个进程之间进行通信...用命名管道实现server&client通信 在vscode中,分别创建server.cc文件和client.cc文件以及makefile 如何使用makefile连续生成可执行程序 若这样创建makefile...:"<<strerror(errno)<<endl; return 2; } cout<<"open fifo success,begin"<<endl; // 3.正常通信...if(wfd<0)//说明打开失败 { cout<<errno<<":"<<strerror(errno)<<endl; return 0; } //进行常规通信

    1.9K30

    Linux之进程间通信——管道

    前言 管道Linux中最古老的进程间通信的方式,本文介绍了进程间通信的相关概念,主要介绍了匿名管道和命名管道。 一、进程间通信 1.概念 什么是进程间通信?...本文主要介绍的是管道。 二、管道 1.管道介绍 管道是Unix中最古老的进程间通信的方式,我们把连接两个进程的数据流称为“管道”。...管道的生命周期是根据进程的,进程退出,则管道释放; 管道可以用来进行具有血缘关系的进程间通信(常用于父子进程); 管道是面向字节流的; 半双工——单向管道(特殊); 互斥与同步机制——对共享资源进行保护的方案...2.命名管道 匿名管道的限制就是只能在具有血缘关系的进程间通信,那么如果是两个毫不相干的进程间通信交互呢? 如果我们想要在两个不相关的进程之间进行通信,我们可以使用FIFO文件,它被称为命名管道。...本文作者目前也是正在学习Linux相关的知识,如果文章中的内有错误或者不严谨的部分,欢迎大家在评论区指出,也欢迎大家在评论区提问、交流。

    29731

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

    如下图所示: 由于不同进程间是相互隔离的,所以必须借助内核来作为桥梁来进行相互通信,内核相当于岛屿之间的轮船,如下图所示: 内核提供多种进程间通信的方式,如:共享内存,信号,消息队列 和 管道(pipe...本文主要介绍 管道 的原理与实现。 一、管道的使用 管道 一般用于父子进程之间相互通信,一般的用法如下: 父进程使用 pipe 系统调用创建一个管道。...由于子进程会继承父进程打开的文件句柄,所以父子进程可以通过新创建的管道进行通信。...前面介绍了 管道(pipe) 的使用,接下来将会介绍管道在内核中的实现方式。 本文使用 Linux-2.6.23 内核作为分析对象。 1....管道对象 在 Linux 内核中,管道使用 pipe_inode_info 对象来进行管理。

    4K52

    Linux进程间通信管道

    进程间通信的发展: 管道 System V进程间通信 POSIX进程间通信 进程间通信的分类:  管道 匿名管道 命名管道 System V IPC System V 消息队列 System...匿名管道: 匿名管道性质:  匿名管道仅支持父子间进程通信。...当我们创建一个进程,在linux系统中它被如下图进行管理: 我们再通过这个进程创建一个子进程,子进程继承父进程的代码和数据:  没错,此时我们的父子进程能看到同一份资源,我们可以模拟一下通信,父进程往缓冲区写入...从上图可以算出管道的大小为512*8 = 4096字节。  命名管道: 刚才介绍的匿名管道,只可用于父子进程间通信,如果两个毫不相干的进程要实现通信该怎么办呢?接下来就需要介绍一下命名管道了。...mkfifo函数: mkfifo函数用于创建一个命名管道。 mkfifo的第一个参数表示要创建的命令管道文件,如果不带路径默认再当前文件夹下。 mkfifo的第二个参数表示管道的文件权限。

    8610

    Linux进程间通信(一) - 管道

    管道(pipe) 普通的Linux shell都允许重定向,而重定向使用的就是管道。...写进程在管道的尾端写入数据,读进程在管道的头端读出数据。数据读出后将从管道中移走,其它读进程都不能再读到这些数据。管道提供了简单的流控制机制。管道主要用于不同进程间通信。...当使用半双工管道时,任何关联的进程都必须共享一个相关的祖先进程。因为管道存在于系统内核之中,所以任何不在创建管道的进程的祖先进程之中的进程都将无法寻址它。而在命名管道中却不是这样。 ?.../ipc_pipe print from parent ==> Hello Pipe 命名管道(FIFO) 命名管道也被称为FIFO文件,它是一种特殊类型的文件,它在文件系统中以文件名的形式存在,但是它的行为却和之前所讲的匿名管道...由于Linux中所有的事物都可被视为文件,所以对命名管道的使用也就变得与文件操作非常的统一,也使它的使用非常方便,同时我们也可以像平常的文件名一样在命令中使用。

    3K70

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

    当然,OS的IPC提供了一种机制,以允许不必通过共享地址空间来通信和同步其动作。这就不得不提Linux的的前身Unix。因为Linux一开始就是从这儿借鉴的。...BSD Unix设计了socket(套接字)通信。这样将进程之间的通信不仅仅限制在单机内。Linux继承了这些。...Linux进程通信方式: 管道管道(pipe)分为无名管道和有名管道。无名管道用于具有亲缘关系进程间的通信,有名管道则可以在任意的进程中间进行通信管道通信具有以下的特点: 管道是半双工的。...(双向通信的,但是不能同时向双方传输) 只能用于父子进程或者是兄弟进程之间(就是要具有亲缘关系) 管道是一种文件(能读写),它只存在于内存之中。他是具有亲缘关系的进程共享的。...管道文件有大小限制的,在我现在的内核版本下他是4KB。管道文件的大小由PIPE_BUF描述。它在#include这个头文件中给出。

    1.4K10

    Linux进程间通信【匿名管道

    匿名管道 和 命名管道,两者绝大部分原理、特点都一致,本文主要介绍 匿名管道,同时适用于 命名管道 的知识点统一称为 管道 Linux 中一切皆文件,所以管道本质上就是一个文件 ---- 3、管道的工作原理...管道的工作原理其实很简单:打开一个文件,让两个进程分别享有读端与写端 fd,对文件进行操作即可 命名管道和匿名管道基本原理都差不多,但命名管道更强大,实现两个毫不相干的进程间通信 具体在 OS 中的体现...管道 的使用和 文件 一致,迎合 Linux一切皆文件思想 4.3、管道读写规则 管道是一种 半双工、单向流 的通信方式,因此在成功创建匿名管道后,需要两个待通信的进程都能获得同一个 pipefd 数组...(常用于父子进程间通信) pipe 打开管道,并不清楚管道的名字等信息,这种管道称为 匿名管道,因此 匿名管道 只能用于有血缘关系的进程 IPC,因为 需要通过 fork 继承匿名管道信息 4.在管道中...,不仅适用于匿名管道,同时也适用于命名管道 ---- 7、匿名管道的大小 既然管道被写满,那么管道的大小究竟是多少?

    26720

    linux 进程通信-管道(pipe)《Rice linux 学习开发》

    Pipe概述 管道Linux中进程间通信的一种方式,它分为三种:无名管道,标准流管道,有名管道。...1-无名管道:只能用于具有亲缘关系的进程之间的通信(也就是父子进程或者兄弟进程) 它是一个半双工的通信模式,具有固定的读端和写端。...,当一个管道建立时,它会创建两个文件描述符fds[0]和fds[1],其中fds[0]固定用于管道,而fds[1]固定用于管道,这样就构成一个半双工的通道 创建管道的函数: 管道关闭时只需要使用... 用pipe()函数创建的管道两端处于一个进程中,由于管道主要用于不同进程间的通信,因此实际应用中没有太大意义。...github链接:https://github.com/RiceChen/Linux-process-communication.git,记得加个star

    1.6K20

    Linux:进程间通信(一.初识进程间通信、匿名管道与命名管道、共享内存)

    1.认识进程间通信 我们通过之前的知识知道,进程具有独立性。两个进程之间时不能进行数据的直接传递的 但我们之前学校的fork()函数不是传递子进程的pid给父进程?...管道只能被设计成为单向通信Linux中,管道确实可以被视为一种机制,同时也是一种特殊的文件类型。...这种机制大大简化了进程间的通信过程,提高了通信效率。 从文件的角度来看,管道Linux中被实现为一种特殊的文件类型。...为了支持管道通信,OS提供了一个接口:pipe() 2.1匿名管道 匿名管道(Anonymous Pipe)Linux中提供的一种进程间通信(IPC)机制。...与cout不同的是,cerr通常用于输出错误消息,而不是普通的程序输出。它是线程安全的,可以在多线程环境中使用。

    34820
    领券