进程间的通讯-----管道

进程间的通讯:两个以上的进程相互传递数据

管道就是进程通讯方式的一种。管道分为有名管道和无名管道

管道:在进程之间建立数据传输的桥梁, 已完成数据的流通。
注意: 管道是一种半双工通讯
<一>有名管道

概念:有名管道在磁盘上会占据一个 inode 节点, 但是不开辟 block。 有名管道会有一个文件名。
有名管道的操作:

创建有名管道文件:
               1、 mkfifo 命令创建管道文件
               2、 在程序中调用 mkfifo()函数创建管道文件。
通过对文件的操作(open,write ,read,close)来操作管道文件进而达到进程间数据的流通

有名管道的原理:在磁盘上创建一个inode节点,但是不开辟block,有名管道会有一个文件名,两个进程之间通过打开同一个管道文件实现进程通讯,有名管道是一种特殊的文件,存在于文件系统中

管道

有名管道的代码操作如图:A 进程负责接受用户输入的数据, B 进程将用户输入的数据存储到普通文件 a.txt 中
1:有名管道写端(A进程)

管道代码

2:有名管道读端(B进程)

管道代码2

<二>无名管道  

 概念:无名管道并不会创建管道文件, 所以, 无名管道只能应用于父子进程之间。 因为父子进程之间对于 fork 之前打开的文件描述符是共享的。
无名管道的操作:int pipe(int fd[2]); 用于创建并打开一个无名管道, 并且使 fd[0]指向管道的读端, fd[1]指向管道的写端
读无名管道中的数据: read(fds[0], ...);
给无名管道中写数据: write(fds[1], ...);
关闭无名管道: close(fds[0]); close(fds[1]);(由于管道是半双工通讯,所以父子进程只能打开读端或写端,因此必须关闭掉不用打开的一端)
无名管道的原理如图                            

管道

无名管道的代码操作:父进程接受用户数据的数据, 子进程则将用户数据的字符串逆序打印。

无名管道

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值