进程间通信--FIFO

20 篇文章 0 订阅
10 篇文章 2 订阅

在linux进程间通信中,管道(pipe)是非常有用的,而且我们使用的地方也非常多,但是不可否认的是管道有一个致命的缺点就是只能用于有相关关系的进程之间的通信,比如:父子进程。为了很好的解决这个问题。因此我们引入了——FIFO(first in first out)顾名思义:先入先出。相对于pipe来说,FIFO一般被称为命名管道,因为他们和文件系统相关联,可以实现任意两个进程之间的通信。
相对于pipe单工通信的特点来说,FIFO可以实现全双工的通信,这样的优点就是多个进程都可以实现对同一个FIFO的读和写,当然了这些进程之间都要相互协作,就像1一个团队,不合作怎么能够做出好的东西呢?同时也要注意1,写入的数据不能大于PIPE_BUF字节,不然会有冲突的。
在我们这个系统里,使用了mkfifo命令来创建FIFO。我们看看FIFO函数的调用。

int mkfifo(const char* path, mode_t mode);

参数path指定了创建FIFO的路径名,path一定不能存在,而参数mode指定了FIFO的权限,该参数将和进程umask一起起作用,若操作成功,则返回0,否则返回-1,同时将失败的原因保存在外部变量errno中。
在创建好FIFO之后,使用open(系统接口)函数来打开该FIFO。
接下来写一个server和一个client进程,他们之间使用FIFO来进程。

server.c

server.c

client.c

client.c

这样我们就可以实现client和server之间的通信了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值