首页
学习
活动
专区
工具
TVP
发布

Linux进程通信——管道

管道 进程通信概念 管道 匿名管道 创建匿名管道的过程 管道读写的特性 管道本身的特征 基于管道的进程池设计 命名管道 让两个无血缘关系的进程通信 进程通信概念 什么是进程通信 首先我们清楚,进程是具有独立性的...怎么进行通信 目前通信有两套标准: POSIX——让通信过程可以跨主机 System V——聚焦在本地通信(比较陈旧的标准) 重点:共享内存 管道 管道是Unix中最古老的进程间通信的形式。...一般而言,我们管道只能用来单项数据通信管道就是输送资源的,就是数据。 这里我们来实现一下父子进程之间的通信: 这里说一下:CXX,CPP,CC都是C++源文件的后缀。...这种通信,称之为管道通信。 这个过程其实就相当于父进程通过操作系统写给管道,也就是相当于写给操作系统,然后子进程通过操作系统从管道当中读取内容。...管道本身的特征 1.管道的生命周期是进程的生命周期 2.管道可以用来进行具有血缘关系的进程之间进行通信,常用于父子通信

3.8K70

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类型文件,从而可通过此文件进行不相关进程间的通信通信方式。

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

Linux进程通信——有名管道

管道(pipe)是无名管道,他是进程资源的一部分,随着进程的结束而消失。并且它只能在拥有公共祖先进程的进程内通信。而有名管道(FIFO)的出现则解决了这个问题。FIFO提供了一个路径名与它关联。...这样可以通过访问该路径就能使得两个进程之间相互通信。此处的FIFO严格遵守“先进先出”原则。读总是从头开始的,写总是从尾部进行的。匿名管道和FIFO都不支持lseek函数对他们操作。...Linux下建立有名管道的函数是mkfifo。...或者说,这也体现了进程的并发行,管子有了一端以后,还必须有另一端,这才能构成管道。 测试一下,FIFO用于两个无关进程直接的通信。首先建立我们有两个进程,一个是test1,另一个是test2....通信过程中,读进程退出后,写进程向命名管道内写数据时,写进程也会退出。

2.7K30

Linux】进程间通信——管道

比如管道。 1.3进程间通信分类 如何去通信? 答:1.采用标准的做法:System V进程间通信(聚焦在本地通信,如共享内存)、POSIX进程间通信(让通信过程可以跨主机)。...,管道释放 2.管道可以用来进行具有血缘关系的进程间通信(常用于父子通信) 3.管道是面向字节流的 4.半双工—单向通信(特殊) 5.互斥与同步机制——对共享资源进行保护的方案 ---- 2.3.../tmp/mypipe.name" bool createFifo(const std::string &path) { umask(0); int n = mkfifo(path.c_str...在comm.hpp中封装好删除的函数: void removeFifo(const std::string &path) { int n = unlink(path.c_str());...我们从进程间通信开始介绍,而后进入了进程间通信——管道这部分,管道又分为匿名管道和命名管道,以及之间的区别,匿名管道需要具有血缘关系的进程,而命名管道则不需要,同时,匿名管道通过子进程继承文件地址的方式

15540

Linux 的进程间通信管道

微博ID:orroz 微信公众号:Linux系统技术 前言 管道是UNIX环境中历史最悠久的进程间通信方式。本文主要说明在Linux环境上如何使用管道。...Linux系统直接把管道实现成了一种文件系统,借助VFS给应用程序提供操作接口。 虽然实现形态上是文件,但是管道本身并不占用磁盘或者其他外部存储的空间。在Linux的实现上,它占用的是内存空间。...所以,Linux上的管道就是一个操作方式为文件的内存缓冲区。 管道的分类和使用 Linux上的管道分两种类型: 匿名管道 命名管道 这两种管道也叫做有名或无名管道。...表示这是一个管道文件。有了这个管道文件,系统中就有了对一个管道的全局名称,于是任何两个不相关的进程都可以通过这个管道文件进行通信了。...管道推荐的使用方法是其单工模式:即只有两个进程通信,一个进程只写管道,另一个进程只读管道

8.2K21

Linux进程间通信【命名管道

:p 管道文件 出自:Linux 权限理解和学习 这个管道文件也非常特殊:大小为 0,从侧面说明 管道文件就是一个纯纯的内存级文件,有自己的上限,出现在文件系统中,只是单纯挂个名而已 可以直接在命令行中使用命名管道...《Linux进程间通信【匿名管道】》 2.1、特点 可以简单总结为: 管道是半双工通信 管道生命随进程而终止 命名管道任意多个进程间通信 管道提供的是流式数据传输服务 管道自带 同步与互斥 机制 2.2...简易版 bash 的具体实现可以看看这篇文章 《Linux模拟实现【简易版bash】》 步骤: 创建命名管道 将 bash 改装,打开命名管道文件,作为 读端 创建独立进程,打开命名管道文件,作为 写端...---- 总结 以上就是本次关于 Linux 进程间通信之命名管道的全部内容了,作为匿名管道的兄弟,命名管道具备匿名管道的大部分特性,使用方法也基本一致,不过二者在创建和打开方式上各有不同:匿名管道简单...,但只能用于具有血缘关系进程间通信,命名管道虽麻烦些,但适用于所有进程间通信场景;在本文的最后,使用命名管道实现了几个简单的小程序,这些小程序的本质都是一样的:创建命名管道 -> 打开命名管道 -> 通信

16120

Linux进程通信管道解析

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

1.3K10

Linux进程间通信管道

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

2.5K80

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

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

3.7K52

Linux之进程间通信——管道

前言 管道Linux中最古老的进程间通信的方式,本文介绍了进程间通信的相关概念,主要介绍了匿名管道和命名管道。 一、进程间通信 1.概念 什么是进程间通信?...本文主要介绍的是管道。 二、管道 1.管道介绍 管道是Unix中最古老的进程间通信的方式,我们把连接两个进程的数据流称为“管道”。...) 父子进程正确进行管道通信的方式: 父进程创建管道,同时具有读写权限。...2.命名管道 匿名管道的限制就是只能在具有血缘关系的进程间通信,那么如果是两个毫不相干的进程间通信交互呢? 如果我们想要在两个不相关的进程之间进行通信,我们可以使用FIFO文件,它被称为命名管道。...本文作者目前也是正在学习Linux相关的知识,如果文章中的内有错误或者不严谨的部分,欢迎大家在评论区指出,也欢迎大家在评论区提问、交流。

19931

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

管道(pipe) 普通的Linux shell都允许重定向,而重定向使用的就是管道。...写进程在管道的尾端写入数据,读进程在管道的头端读出数据。数据读出后将从管道中移走,其它读进程都不能再读到这些数据。管道提供了简单的流控制机制。管道主要用于不同进程间通信。...当使用半双工管道时,任何关联的进程都必须共享一个相关的祖先进程。因为管道存在于系统内核之中,所以任何不在创建管道的进程的祖先进程之中的进程都将无法寻址它。而在命名管道中却不是这样。 ?...由于Linux中所有的事物都可被视为文件,所以对命名管道的使用也就变得与文件操作非常的统一,也使它的使用非常方便,同时我们也可以像平常的文件名一样在命令中使用。...,注意与fifowrite.c文件中的FIFO同名 pipe_fd = open(fifo_name, open_mode); printf("Process %d result

2.9K70

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

当然,OS的IPC提供了一种机制,以允许不必通过共享地址空间来通信和同步其动作。这就不得不提Linux的的前身Unix。因为Linux一开始就是从这儿借鉴的。...Unix最早是由AT&T的贝尔实验室开发的,值得一提的是,在Unix操作系统发展的过程中,产生了许多副产物(POSIX标准也是副产物之一),其中最著名的应当是C语言。是的,它仅仅是个副产物。...后来他们改造了B语言,就形成了今天大名鼎鼎的C语言。这个自发明到现在这个物联网时代仍占据编程语言榜前10的稳固位置。不得不感叹其生命力的强大以及适应性的强大。...BSD Unix设计了socket(套接字)通信。这样将进程之间的通信不仅仅限制在单机内。Linux继承了这些。...Linux进程通信方式: 管道管道(pipe)分为无名管道和有名管道。无名管道用于具有亲缘关系进程间的通信,有名管道则可以在任意的进程中间进行通信管道通信具有以下的特点: 管道是半双工的。

1.4K10

Linux进程间通信【匿名管道

,如 Linux , POSIX 标准具有跨平台性,就连 Windows 也对其进行了支持,后续学习 同步与互斥 时,所使用的信号量等都是出自 POSIX 标准,这是进程间通信的学习重点 POSIX 标准支持网络中通信...管道 的使用和 文件 一致,迎合 Linux一切皆文件思想 4.3、管道读写规则 管道是一种 半双工、单向流 的通信方式,因此在成功创建匿名管道后,需要两个待通信的进程都能获得同一个 pipefd 数组...时,Linux 将保证写入的原子性 当要写入的数据量大于 PIPE_BUF 时,Linux 将不再保证写入的原子性 原子性:不存在中间状态,确保数据的安全性 ---- 5、管道的特点 管道 主要有以下几个特点...i386 平台中,管道大小为 4096 字节,即 4kb),从 Linux 2.6.11 开始,管道大小的容量统一为 65536 字节,即 64kb 因为在 Linux 2.6.11 版本中,对管道进行更新...+11 .PHONY:clean clean: rm -r ctrlProc ---- 总结 以上就是本次关于 Linux 进程间通信之匿名管道的全部内容了,在本文中,我们首先学习了什么是 IPC,

16520

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

Pipe概述 管道Linux中进程间通信的一种方式,它分为三种:无名管道,标准流管道,有名管道。...1-无名管道:只能用于具有亲缘关系的进程之间的通信(也就是父子进程或者兄弟进程) 它是一个半双工的通信模式,具有固定的读端和写端。... 用pipe()函数创建的管道两端处于一个进程中,由于管道主要用于不同进程间的通信,因此实际应用中没有太大意义。...,则读操作进行部分写入或者调用失败 例程 通道例程中,提供了有名管道的读例程和写例程,例程请参考我github的pipe目录下的read.c和write.c。...github链接:https://github.com/RiceChen/Linux-process-communication.git,记得加个star

1.6K20

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

因为这个文件不需要有名字,更不需要怎么去标定它,所以我们把这种管道叫做匿名管道,我们把红色框中的整体成为匿名管道。 至此我们还没有进行通信,我们一直都在建立通信信道!...我们也可以读一下管道的手册: 如上,也就是说从 Linux 2.6.11 内核之后管道的大小就变成了 64KB;我们接着看: 我们可以看到有一个 PIPE_BUF 的东西,其实它就是单次向管道中写入的大小...= 'c'; write(wfd, &c, 1); // strlen(buffer) + 1???...管道特性 具有血缘关系的进程才能进行进程间通信管道只能单向通信; 父子进程是会进程协同的,同步和互斥的,这是为了保护管道文件的数据安全; 管道是面向字节流的; 管道是基于文件的,而文件的生命周期是随进程的...首先我们以前接触过 | 这个符号,其实这个就是管道,例如我们在多条指令中使用 | : cat test.c | head -10 | tail -5 那么它和我们上面学的管道又有什么关系呢?

12410

管道通信概述

管道通信(Communication Pipeline)即发送进程以字符流形式将大量数据送入管道,接收进程可从管道接收数据,二者利用管道进行通信。...无论是SQL Server用户,还是PB用户,作为C/S结构开发环境,他们在网络通信的实现上,都有一种共同的方法——命名管道。...由于当前操作系统的不惟一性,各个系统都有其独自的通信协议,导致了不同系统间通信的困难。尽管TCP/IP协议目前已发展成为Internet的标准,但仍不能保证C/S应用程序的顺利进行。...命名管道作为一种通信方法,有其独特的优越性,这主要表现在它不完全依赖于某一种协议,而是适用于任何协议——只要能够实现通信。...其他方式 关于Unix中的管道通信 从Unix System V 开始,系统提供有名管道和无名管道两种数据通信方式。 无名管道为建立管道的进程和子进程提供一种以比特流方式传送信息的通信管道

87710

Linux系统编程-进程间通信(管道)

进程间通信方式介绍 这篇文章介绍Linux下进程的间的通信方式,常用的方式如下: 1. socket—网络通信 2. 管道---无名管道—命名管道---文件--FIFO 3. 消息队列 4....无名管道 无名管道用于有亲戚关系的进程间通信。 比如: 兄弟进程、父子进程等。...无名管道的特点: 只能在亲缘关系进程间通信(父子或兄弟) 半双工(固定的读端和固定的写端) 虚拟管道文件是一个存在内存的特殊文件,可以用read、write函数进行操作。...命名管道 无名管道只能在亲缘关系的进程间通信大大限制了管道的使用,有名管道突破了这个限制,通过指定路径名的形式实现不相关进程间的通信,因为命名管道通信使用的管道是一个实体文件,在磁盘上的存在的,而无名管道是存在内存中的虚拟文件...[wbyq@wbyq test]$ ls -l 总用量 0 prw-rw-r--. 1 wbyq wbyq 0 10月 15 15:29 test.fifo 4.2 在命令行演示两个相关的进程通过进行管道文件进行通信

1.1K50
领券