Linux进程通信之命名管道

命名管道

上一节,我们讲了管道的用法,pipe函数。它属于无名管道,可以看到上一节的例子,它只能在父子具有亲缘关系的进程间进行通信,而命名管道呢?
FIFO,也称为命名管道,它是一种文件类型。
1、特点

FIFO可以在无关的进程之间交换数据,与无名管道不同。

FIFO有路径名与之相关联,它以一种特殊设备文件形式存在于文件系统中。

在这里插入图片描述
mkfifo函数第一个参数为这个管道本身的路径名,第二参数又是模式,没必要记住,用的时候查一下就好了。这里哟们用0600(之前文件操作也用到过的可读可写权限)
在这里插入图片描述这里我们简单的创建一个有名管道,来看看
运行结果:

在这里插入图片描述
可以看到我们执行两次这个程序,一次成功一次失败,失败的原因是file文件在第一次执行之后已经存在,不能重复创建名称一样的管道,那我们能不能换一种更安全一点的创建方法呢?
来看看这种写法:
在这里插入图片描述我们直接在创建语句之后判断返回值是否错误以及错误原因是否是因为文件已经存在,如果是打印出错误结果,这种写法是比较保险点,如果错误了,我们可以选择是删除还是如何操作。
来看看这两个程序(实际上是一个程序,只是一个负责写东西。一个负责读东西,命名为read.c和write.c)
来看看这两段代码:
代码:
这是write.c
这是read.c
在这里插入图片描述可以看到,这边read.c中首先创建一个命名管道名字为file,以文件的形式存在,接着打开这个管道,读取里面的东西,可是这个管道里一开始是空的,所以它会堵塞在这里,直到有东西流进了管道
write.c中打开这个管道,向里面写入“gao ying jie hen shuai ”
这句话,写入之后read.c立即获取到这句话,把它读取出来,来看看演示结果。

演示结果:

在这里插入图片描述
这里read堵塞了,等待有东西写入。

在这里插入图片描述这里写入要输入的话。
在这里插入图片描述read立刻读取到了这句话,这就实现了两个没有亲缘关系的进程间的通信。(这就是命名管道的好处)
(师上官可编程)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值