Linux 有名管道

1.进程间通信一般有六种方式:信号、管道、信号量、消息队列、共享内 存、套接字。
2.管道的产生原因
     为了解决管道不能提供非父/子关系进程间通信的缺陷,在管道的基础上发展了有名管 道(FIFOs)的概念尽管管道在 Linux 系统内部是以文件节点(inode)的形 
式存在的,但是由于其对外的不可见性( “无名”性) ,我们无法创建新的句柄对其进行访问。而有名管道在Linux系统中以一种特殊的设备文件的形式存在于文件系统中。这样它不仅具有了管道的通信功能,也具有了普通文件的优点(可以同时被多个进程共享,可以长期存在等等)
 3.有名管道通信原理(半双工通信)
我们在内存上找一块空间,用FIFO标记出来,把它当做管道,管道的一端连接一个进程的输入,这个进程向管道中写数据,另一端连接一个进程的输出,该进程从管道中读数据。当管道中没有信息的话,从管道中读取的进程会等待,直到另一端的进程放入信息。当管道被放满信息的时候,尝试放入信息的进程会等待,直到另一端的进程取出信息。当两个进程都终结的时候,管道也自动消失。
4.有名管道操作
创建:命令方式:mkfifo FIFO  函数模式:mkfifo()
打开:open()
读:read()
写:write()
关闭:close()

 进程A:


 进程B:
阻塞运行函数: 函数调用以后并不会立即返回,需要等待某些条件的发生才会返回。
open操作管道文件时,就是阻塞运行的函数。即如果只有一个进程以只写/只读方式打开一个管道文件,open()会阻塞运行,直到有一个进程以只读/只写方式打开管道文件,open()才会返回,进程才会接着运行。
read函数也会阻塞运行,直到写端写入数据或所有的写端都关闭。
read读取数据,并且会将内存上已读数据清空。

补充:1.管道的默认大小是多少?
命令:ulimit -a 查看管道大小 内核设定的大小为 4k

管道也是一种文件,但它又和一般的文件有所不同,管道是一个固定大小的缓冲区。在Linux中该换冲区的大小为一页,4k使得他的大小不像文件那样不加检验的增长。


 



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值