您现在的位置是:首页» windows系统» linux进程和线程学习教程,linux管道pipe详解

linux进程和线程学习教程,linux管道pipe详解

2024-07-13 03:25:58
本内容由系统网小编为大家分享,Windows系统安装教程、办公系统、软件怎么使用、软件使用教程、办公软件攻略等信息。管道是最古老的IPC之一, 以管道文件作为媒介进行传输其中分为有名管道和无名管道无名管道的管道文件在文件系统中不可见, 而有

本内容由系统网小编为大家分享,Windows系统安装教程、办公系统、软件怎么使用、软件使用教程、办公软件攻略等信息。

管道是最古老的IPC之一, 以管道文件作为媒介进行传输

其中分为有名管道和无名管道

无名管道的管道文件在文件系统中不可见, 而有名可见

管道通信实质上是内存通信, 由内核负责

一、无名管道(PIPE)

只能用于亲缘关系的进程(父子 、 兄弟), 由它的机制决定

无名管道的管道文件在文件系统中不可见

使用方法:

1、父进程调用pipe() 函数创建无名管道, 无名管道有读端 、 写端

2、用fork产生子进程, 子进程自动继承父进程的描述符 ,也就是 无名管道的 读端 、 写端

3、这是一种半双工通信, 一条管不能同时又进又出,想 读,就把写关了,另一边就把写关了,读就开 , 如下图所示

1.1 父子通信

首先父进程创建一个无名管道 , 有读、写描述符

然后fork 后产生一个子进程,它和父进程称为父子进程

这个子进程继承了父进程的读、写描述符

下面代码,子进程是写,所以要关掉读 ; 父进程是读,所以要关掉写

代码如下(pipe、父子进程):

1.2 兄弟通信

父进程创建了 读、写 描述符

fork 两次后产生了两个子进程(互为兄弟进程),它们都继承父进程的 读、写 描述符

在这里,父进程不参与通信,因此父进程的读、写描述符都需要关闭掉

下面的代码,子1是写,所以关掉读 ; 子2是读,所以关掉写

代码如下(pipe、兄弟进程):

二、有名管道(FIFO)

用于所有进程的通信,不局限父子、兄弟进程

有名管道在文件系统中是可见,虽然可见, 但是是在内存当中

使用方法:

1、进程1创建一个有名管道文件,可以在文件系统中看到, 然后和它通信的进程2打开这个文件即可通信

2、没有读、写描述符, 这里只有文件描述符,用它进行读或写

3、这里也是一个半双工通信

例如进程1创建管道文件、然后打开文件获取文件描述符、接着进行用描述符来读管道文件

代码如下(fifo、读):

而进程2不需要创建管道文件, 打开进程1创建的并获取文件描述符、接着进行用描述符来写管道文件

代码如下(fifo、写):

Linux进程间通信第二讲 管道PIPE FIFO - 知乎 (zhihu.com)

XTw.com.Cn系统网专业应用软件下载教程,免费windows10系统,win11,办公软件,OA办公系统,OA软件,办公自动化软件,开源系统,移动办公软件等信息,解决一体化的办公方案。

免责声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。内容仅供参考使用,不准确地方联系删除处理!

联系邮箱:773537036@qq.com

标签: 管道 进程 通信