进程间通讯——管道(有名管道)



     前几天我们简单的介绍了进程间通讯的一种渠道——管道,我们有说道管道的概念,管道的通讯原理,还提到了管道的两种类型:有名管道和无名管道,今天我们就来说说有名管道吧

     基本概念:

有名管道在文件目录中有一个文件标示(管道文件)。实际不占据磁盘空间。数据缓存在内存上(只有使用时内存才开辟,由于在内存上,因此管道文件的属性中所占空间大小为0字节;当两个进程间一读一写完成后,管道文件也立即在内存清空

 

 FIFO为管道文件

  • 管道的操作:

  • 创建:  命令方式:mkfifo  函数方式:mkfifo();

  • 打开:  open(char *path , int flag);

  • 读数据: read(int fd , char *buff , intsize);

定义一个buff,将fd里的数据读入buff里;

  • 写数据: write(int fd ,char *buff ,int size)

              定义一个buff,将buff里的数据写入fd

  • 关闭:  close(int fd);

 

  • 阻塞运行函数:

    函数调用以后并不会立即返回,需要等待某些条件的发生才会返回

   Openreadwrite函数在操作文件时不会阻塞,但在操作管道文件时会出现阻塞

   

  • Open:如果一个进程以只写的方式打开一个文件时,open函数就会阻塞,直到另一个进程以只读的方式打开管道文件时open才会返回,进程才会接着执行;如果一个进程以只读的方式打开一个文件时,open函数就会阻塞,直到另一个进程以只写的方式打开管道文件时open才会返回,进程才会接着执行;

  • Readread也会阻塞,直到写入数据或者所有写端都关闭才不会阻塞,read读写数据后会将内存上的已读数据清空;

  • Write:当管道满的时候就会阻塞

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值