管道实现进程间通信

本文介绍了无名管道和有名管道在进程间通信中的应用。无名管道是半双工,适用于相关进程,而有名管道是持久的,能在任意进程间通信。文章通过实例展示了如何创建、读写和关闭管道,并讨论了它们的特点和优缺点。
摘要由CSDN通过智能技术生成

一、无名管道

1、什么是管道?
管道用于相关进程间的通信,相当于一个传递工具;
1、特点
(1)无名管道是半双工的,在管道的一端只能进行读或者是写,二者不可同时进行;就像水管一样,从管子的一端留入水,另一端流出来,不可以两端同时流入或者流出;
(2)无名管道只能实现在相关的进程间共享数据
(3)使用fork或者execve创建的子进程继承了父进程的文件描述符,可用管道进行共享内存
2、打开和关闭
(1)打开

int pipe( int fd[2] );
//读入或写入数据,管道必须设置fd[2]

若管道建立成功,则打开两个文件描述符,并将值保存在fd[2]这个整数数组中;
注意:
fd[1]用于写入数据,
fd[0]用于读出数据。
若管道建立失败,则返回-1,并且设置errno;
(2)关闭
linux操作系统中,一切皆文件,管道也是文件,成为管道文件(p),所以关闭管道,和关闭文件的方式一样,使用close( ) ;
2、读写管道
和读写文件一样,使用write( )和read( )来实现管道文件写和读;
几乎不会在同一个进程中打开一个管道仅供进程自己使用,管道的本质是用来在进程间交换数据的, 对于一个进程来说,它本来就可以访问自己要通过管道共享的数据,和自己共享数据是没有意义的;
切记:不可以对一个管道的两端同时进行读或者写操作;
3、举个例子
$ vim pipe.c

/pipe.c*
#include<stdio.h>
#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值