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

进程通信--管道

用于通信管道文件本质是一个内存级文件,它不需要有IO过程,一个进程向缓冲区写,一个进程向缓冲区中读,此时就完成了进程通信。只能一个进程写,一个进程读,所以管道是单项通信。...匿名管道(只能用于有血缘关系进程之间通信) 匿名管道没有名字,而是子进程通过继承父进程文件描述符表让子进程得到这个文件地址,所以匿名管道只能用于有血缘关系进程之间通信。...:1.建立匿名管道(让父子进程共享(能看到)同一段资源) 2.利用这个内存级文件实现进程通信(子进程写入,父进程读取) //这段共享资源是由操作系统来建立,因为进程具有独立性,如果由进程来建立,非此进程无法看到...在关闭写端时候,一旦读端将缓冲区数据读完就会读到0然后退出 4.在关闭读端情况下,尝试用写端去写入会被操作系统发送信号杀死 3.管道特征 1.只能用于具有血缘关系进程之间通信,是由父进程创建管道文件以后再调用...有名管道(用于没有血缘关系进程通信) 如果要在两个毫无关系进程之间通信就需要使用有名管道,因为有名管道有名字,所以它唯一标识就是路径+文件名(匿名管道唯一标识是地址)。

16930

Linux 进程通信管道

微博ID:orroz 微信公众号:Linux系统技术 前言 管道是UNIX环境中历史最悠久进程通信方式。本文主要说明在Linux环境上如何使用管道。...目前在任何一个shell中,都可以使用“|”连接两个命令,shell会将前后两个进程输入输出用一个管道相连,以便达到进程通信目的: [zorro@zorro-pc pipe]$ ls -l /etc...它特点是只能在父子进程中使用,父进程在产生子进程前必须打开一个管道文件,然后fork产生子进程,这样子进程通过拷贝父进程进程地址空间获得同一个管道文件描述符,以达到使用同一个管道通信目的。...表示这是一个管道文件。有了这个管道文件,系统中就有了对一个管道全局名称,于是任何两个不相关进程都可以通过这个管道文件进行通信了。...用一个图来说明这个程序状态就是这样: image.png 一个进程自己给自己发送消息这当然不叫进程通信,所以实际情况中我们不会在单个进程中使用管道

8.2K21
您找到你想要的搜索结果了吗?
是的
没有找到

Linux通过匿名管道进行进程通信

本文研究主要是Linux通过匿名管道进行进程通信相关内容,具体介绍如下。 在前面,介绍了一种进程通信方式:使用信号,我们创建通知事件,并通过它引起响应,但传递信息只是一个信号值。...这里将介绍另一种进程通信方式——匿名管道通过进程可以交换更多有用数据。...管道是一个进程连接数据流到另一个进程通道,它通常是用作把一个进程输出通过管道连接到另一个进程输入。...六、匿名管道缺陷 看了这么多相信大家也知道它一个缺点,就是通信进程,它们关系一定是父子进程关系,这就使得它使用受到了一点限制,但是我们可以使用命名管道来解决这个问题。...命名管道将在下一篇文章:Linux进程通信——使用命名管道中介绍。 总结 以上就是本文关于Linux通过匿名管道进行进程通信全部内容,希望对大家有所帮助。

1.3K21

【Linux】进程通信——管道

如文件系统提供管道通信;OS对应System V模块提供… ps:成本不低是因为我们需要让不同进程看到同一份资源 1.2进程通信目的 进程通信目的在于: 数据传输:一个进程需要将它数据发送给另一个进程...,父进程可以向对应文件文件缓冲区写入,子进程可以通过文件缓冲区读取,此时就完成了进程通信,这种方式提供文件称为管道文件。...,父进程以读写打开,子进程也是以读写打开(一般而言,管道只用来进行单向数据通信);关闭父子进程不需要文件描述符,完成通信管道分为匿名管道和命名管道 2.2匿名管道 我们通过文件名区分文件,但是如果当前进程文件没有名字...让两个进程看到同一个文件,通过进程创建子进程,子进程继承文件地址方式,看到同一个内存级文件,此时内存级文件没有名称就是匿名管道了。匿名管道能用来父进程和子进程之间进行进程通信。...我们从进程通信开始介绍,而后进入了进程通信——管道这部分,管道又分为匿名管道和命名管道,以及之间区别,匿名管道需要具有血缘关系进程,而命名管道则不需要,同时,匿名管道通过进程继承文件地址方式

16940

进程通信(一)管道

也就是说cat负责打印文件内容,grep负责过滤内容,两个进程通过管道 | 连接起来,完成两个进程之间通信! 因此,通信目的就是让多进程协同,完成任务。 如何进行进程通信?...主流通信办法有三种:管道、System V进程通信和POSIX进程通信。 System V是一种聚焦在本地一种通信方法,即在一台计算机中进行多进程协同。...总结一下:进程通信,就是要让不同进程看到同一份资源,即能够协同使用这些资源,然后进行通信,最后完成任务! 管道 什么是管道管道是Unix中最古老进程通信形式。...此时,理解了这些,我们就完成了进程通信第一步:让不同进程看到同一个资源。那么第二步,自然就是通信啦!接下来,我们通过编写代码来认识通信需要用到接口。...管道应用一个限制就是只能在具有共同祖先(具有亲缘关系)进程通信。如果我们想在不相关进程之间交换数据,可以使用FIFO文件来做这项工作,它经常被称为命名管道。命名管道一种特殊类型文件。

44220

UNIX(进程通信):08 管道通信

匿名管道 匿名管道进程通信中比较简单一种,他只用于有继承关系进程,因为匿名,非继承关系进程无法找到这个管道,也就无法完成通信,而有继承关系进程,是通过fork出来,父子进程可以获得得到管道...进一步来说,子进程可以使用继承于父进程资源,但是他无法使用叔伯进程资源。管道通信原理如下: ? 父子进程通过fork后,子进程继承了父进程文件描述符。所以他们指向同一个数据结构。...父子进程通常只需要单向通信,父子进程各关闭自己一端。当父子进程管道进程读写时候,操作系统会控制这一切,包括数据读取和写入,进程挂起和唤醒。...管道特点 只能⽤用于具有共同祖先进程(具有亲缘关系进程)之间进⾏行通信;通常,一个管道由一个进程创建,然后该进程调⽤用fork,此后⽗父、⼦子进程之间就可应⽤用该管道。...命名管道 我们刚刚可以用匿名管道在父子进程之间通信,那如果是两个不想光进程之间该如何通信呢?

1K20

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

@TOC 命名管道 匿名管道只能用来进行进程通信,让具有血缘关系进程进行通信 让毫不相关进程之间进行通信,就需要采用命名管道通信 因为该文件有文件名称,而且必须要有,所以叫做命名管道 1....0,失败返回-1 ---- 管道文件使用 将hello world 重定向到fifo管道中 但是好像并不会写入 fifo只代表一种符号,向符号写入消息并不会刷新到磁盘上,而是只会把hello world...写到管道中 但是管道文件是内存文件,所以大小不会改变 ---- 通过赋值SSH渠道,创建终端2 在保证终端1输出重定向 运行情况下 cat默认从显示器中读取 在终端2中 使用输入重定向 将 fifo...当新创建一个进程时,引用计数就会变成2 此时两个进程指向同一份文件 目的是让两个进程之间进行通信,所以就不应该把数据刷到磁盘上, 应该把磁盘文件改为内存级,不会进行刷盘,把它命名为管道文件 如何保证两个毫不相关进程...文件唯一性,使用路径表示 让不同进程通过文件路径+文件名看到同一个文件,并打开,就是看到了同一个资源 3.

1.8K30

Linux进程通信管道

1,进程通信 (IPC ) Inter-Process Communication   比较好理解概念就是进程通信就是在不同进程之间传播或交换信息。...无名管道:适用于父子进程之间通信      int pipe(int pipefd[2]):该函数在内核中创建管道文件,通过输出参数pipefd返回两个文件描述符,其中pipefd[0]用于读,pipefd...1,进程通信 (IPC ) Inter-Process Communication   比较好理解概念就是进程通信就是在不同进程之间传播或交换信息。...822287-20160112212613335-1194900416.png 无名管道:适用于父子进程之间通信      int pipe(int pipefd[2]):该函数在内核中创建管道文件...,通过输出参数pipefd返回两个文件描述符,其中pipefd[0]用于读,pipefd[1]用于写。

2.5K80

Linux进程通信【命名管道

---- 前言 命名管道通信属于 IPC 其中一种方式,作为管道家族,命名管道特点就是 自带同步与互斥机制、数据单向流通,与匿名管道不同是:命名管道有自己名字,因此可以被没有血缘关系进程看到,...意味着命名管道可以实现毫不相干两个独立进程通信 ---- ️正文 1、什么是命名管道 简单,给匿名管道起个名字就变成了命名管道 那么如何给 匿名管道 起名字呢?...fd 不一样 所以 命名管道 和 匿名管道 还是有区别的 1.3、命名管道与匿名管道区别 不同点: 匿名管道只能用于具有血缘关系进程通信;而命名管道不讲究,谁都可以用 匿名管道直接通过 pipe...《Linux进程通信【匿名管道】》 2.1、特点 可以简单总结为: 管道是半双工通信 管道生命随进程而终止 命名管道任意多个进程通信 管道提供是流式数据传输服务 管道自带 同步与互斥 机制 2.2...,不过二者在创建和打开方式上各有不同:匿名管道简单,但只能用于具有血缘关系进程通信,命名管道虽麻烦些,但适用于所有进程通信场景;在本文最后,使用命名管道实现了几个简单小程序,这些小程序本质都是一样

20220

Linux进程通信(一) - 管道

例如:ps | grep vsftpd .管道是单向、先进先出、无结构、固定大小字节流,它把一个进程标准输出和另一个进程标准输入连接在一起。...写进程管道尾端写入数据,读进程管道头端读出数据。数据读出后将从管道中移走,其它读进程都不能再读到这些数据。管道提供了简单流控制机制。管道主要用于不同进程通信。...可以通过打开两个管道来创建一个双向管道。但需要在子进程中正确地设置文件描述符。必须在系统调用fork()前调用pipe(),否则子进程将不会继承文件描述符。.../ipc_pipe print from parent ==> Hello Pipe 命名管道(FIFO) 命名管道也被称为FIFO文件,它是一种特殊类型文件,它在文件系统中以文件名形式存在,但是它行为却和之前所讲匿名管道...my_fifo: fifo (named pipe) 可以看出,命名管道一种特殊文件,可以按照文件读写方式去操作。

3K70

Linux之进程通信——管道

前言 管道是Linux中最古老进程通信方式,本文介绍了进程通信相关概念,主要介绍了匿名管道和命名管道。 一、进程通信 1.概念 什么是进程通信?...2.目的 进程通信目的是: 数据传输:一个进程需要将它数据发送给另一个进程; 资源共享:多个进程之间共享同一个资源; 通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某件事(...为什么需要进程通信? 有时候我们需要多进程协同,共同完成某种业务内容。例如:管道。 3.进程通信分类 我们所说不同通信种类本质上是按照:上面所说资源是OS中哪一个模块提供来划分。...2.命名管道 匿名管道限制就是只能在具有血缘关系进程通信,那么如果是两个毫不相干进程通信交互呢? 如果我们想要在两个不相关进程之间进行通信,我们可以使用FIFO文件,它被称为命名管道。...所以命名管道通过文件文件名来唯一标定资源唯一性,而匿名管道通过继承方式来标定。 总结 以上就是今天要讲内容,本文介绍了进程通信——管道相关概念。

22431

进程通信:同步双工管道

这样设计也就是为了维持管道畅通,不因一个环节卡住导致其他操作不可完成。         对于管道模型,我设计成:传输层,数据层,逻辑层,应用层四层结构。...,同时为应用层提供方便调用支持,比如在逻辑层启动一个线程调用一个应用层设置回调函数来处理接受到消息,同时暴露一个发送数据函数供应用层使用。...这样应用层只要实现处理消息回调、调用发送数据接口即可。(工作中设计管道模型就是这样子。因为我准备重写一个更稳定和高效管道,目前只大致写好了传输层代码。)        ...(特别注意不要在完成例程中异步操作后WaitforXXEX,否则会出现严重递归问题,最后内存耗尽,程序挂掉) 对每一个接入,都分配一个不可移动内存,其第一个元素设置成OVERLAPPED结构对象,...同时让这个结构对象就是异步操作和完成例程中都会使用那个参数。

1.5K30

Windows进程通信—命名管道

大家好,又见面了,我是全栈君 命名管道通过网络来完成进程通信,它屏蔽了底层网络协议细节。我们在不了解网络协议情况下,也可以利用命名管道来实现进程通信。...与Socket网络通信相比,命名管道不再需要编写身份验证代码。将命名管道作为一种网络编程方案时,它实际上建立了一个C/S通信体系,并在其中可靠传输数据。...命名管道服务器和客户机区别在于:服务器是唯一一个有权创建命名管道进程,也只有它能接受管道客户机连接请求。而客户机只能同一个现成命名管道服务器建立连接。...命名管道服务器只能在WindowsNT或Windows2000上创建,不过可以是客户机。命名管道提供了两种基本通信模式,字节模式和消息模式。...而在消息模式中,客户机和服务器则通过一系列不连续数据单位进行数据收发,每次在管道上发出一条消息后,它必须作为一条完整消息读入。

1.2K10

Linux进程通信【匿名管道

管道时期(古老通信方式) System V 标准时期(本地化进程通信) POSIX 标准时期(网络中进程通信管道可以说是十分古老且简单了,后来新出 System V 标准丰富了进程通信方式...,只需要承担进程通信任务即可 管道一种半双工、单流向通信方式,因为 pipe 只有一个缓冲区,所以这种方式才被叫做 管道通信 ---- 4、匿名管道创建与使用 4.1、pipe 函数 匿名管道通过...: 1.单向通信管道是半双工一种特殊情况 管道就像单行道,只允许数据单向流通,即通知,如果想要实现两个进程相互进行通信,需要创建两条管道管道1:父进程写,子进程读;管道2:子进程写,父进程读...(常用于父子进程通信) pipe 打开管道,并不清楚管道名字等信息,这种管道称为 匿名管道,因此 匿名管道 只能用于有血缘关系进程 IPC,因为 需要通过 fork 继承匿名管道信息 4.在管道中...2.6.11 版本开始,管道大小上限为 64kb ---- 8、匿名管道实操-进程控制 匿名管道作为 IPC 其中一种解决方案,那么肯定有它实战价值 场景:父进程创建了一批子进程,并通过多条匿名管道与它们链接

19220

Linux进程通信——匿名管道

进程协作时可以采用共享一个缓冲区方式来实现。当然,OSIPC提供了一种机制,以允许不必通过共享地址空间来通信和同步其动作。这就不得不提Linux前身Unix。...进程通信目的: 数据传输:一个进程将数据发送给另一个进程 共享数据:多个进程操作共享数据(比如:售票系统),一个进程对共享数据进行了修改,另外一个进程应该立即看到,(否则票买完了,但是另一边不知道,...资源共享 进程控制:一个进程控制另外一个进程执行(例如debug程序)。它希望知道另一个进程实时状态。 Linux进程通信方式: 管道管道(pipe)分为无名管道和有名管道。...无名管道用于具有亲缘关系进程通信,有名管道则可以在任意进程中间进行通信管道通信具有以下特点: 管道是半双工。...(双向通信,但是不能同时向双方传输) 只能用于父子进程或者是兄弟进程之间(就是要具有亲缘关系) 管道一种文件(能读写),它只存在于内存之中。他是具有亲缘关系进程共享

1.4K10

【操作系统】进程通信——管道

进程通信管道 管道 进程通信(IPC-Inter-Process Communication)有多种方式,管道是其中最基本方式。 管道是半双工,即是单向。...管道是FIFO(先进先出)。 在实际进程通信时,可以理解为有一条管道,而每个进程都有两个可以使用管道"端口",分别负责进行数据读取与发送。...单进程管道:int fd[2] 使用文件描述符fd[1],向管道写数据。 使用文件描述符fd[0],从管道中读数据。 注意: 单进程管道无实际用处,管道用于多进程通信。...---- 实例3: 子进程使用execl启动新程序时管道使用 功能详情:有两个程序p1与p2,二者使用管道进行通信,p1给p2发送一个字符,p2收到后打印到屏幕上。...在父进程中,通过管道给子进程发送字符串。 p2 从参数中获取管道读端(参数即p2main函数参数)。 读管道。 将读取到字符串打印出来。

50420

Python进程通信之命名管道

管道一种简单FIFO通信信道,它是单向通信。 通常启动进程创建一个管道,然后这个进程创建一个或者多个子进程接受管道信息,由于管道是单向通信,所以经常需要创建两个管道来实现双向通信。...命名管道是对传统管道扩展,默认管道是匿名管道,只在程序运行时存在;而命名管道是持久化,当不需要时需要删除它。 命名管道使用文件系统,由mkfifo()方法创建。...一旦创建了,两个独立进程都可以访问它,一个读,另外一个写。 命名管道支持阻塞读和阻塞写操作: 如果一个进程打开文件读,它会阻塞直到另外一个进程写。...命名管道必须以只读或者只写模式打开,它不能以读+写模式打开,因为它时单向通信。如果要实现双向通信,必须打开两个命名管道。...下面是一个 Python 使用命名管道来实现进程通信例子 Server 端 import os, time read_path = "/tmp/pipe.in" write_path = "/tmp

3.6K100

使用命名管道实现进程通信

创建命名管道 命名管道常常用于应用程序之间通迅,由于不需要进行序列化和反序列化操作,效率是非常高。相比TCP通信方式,效率更高,但比共享内存要低点。...命名管道可以在本地机器或者局域网内机器实现进程通信,所以是最佳通信方式。...NamedPipeServerStream pipeServer = new NamedPipeServerStream(_pipName, PipeDirection.InOut, 10); 这里表示命名管道服务器管道放心为双向通信...我们仿照HTTP协议方法,使用连续2个以上回车换行表示HTTP头信息结束,我们也这样定义,并附加其它标记来表示流数据发送完毕,参考发送端: public string Query(string...经过测试,这种方法是先命名管道客户端-服务器通信成功。

1.4K50

【Linux】基于管道进行进程通信

进程通信 一、初识进程通信 1. 进程通信概念 进程通信是两个或者多个进程实现数据层面的交换。但是由于进程存在独立性,所以导致进程通信成本比较高。 那么为什么要有进程通信呢?...那么怎么做到进程通信呢?由于进程之间具有独立性,所以在不打破它们独立性前提下,使它们看到同一份“资源”,这就是进程通信本质。那么这个“资源”是什么呢?是谁提供呢?...管道概念 管道是Unix中最古老进程通信形式; 我们把从一个进程连接到另一个进程一个数据流称为一个“管道”。 2....那么我们上面讲解原理都是通过进程创建子进程实现,如果没有任何关系,可以用上面的原理进行通信吗?不可以!必须是父子关系、兄弟关系、爷孙关系…所以管道通信必须具有血缘关系才可以,常用于父子关系。...管道特性 具有血缘关系进程才能进行进程通信管道只能单向通信; 父子进程是会进程协同,同步和互斥,这是为了保护管道文件数据安全; 管道是面向字节流管道是基于文件,而文件生命周期是随进程

13610

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券