进程间通信-信号-pipe-fifo

一、管道(pipe)

1、管道的定义和特点

管道是一种两个进程间进行单向通信的机制。因为管道传递数据的单向性,管道又称为半双工管道。管道的这一特点决定了器使用的局限性。管道是Linux支持的最初Unix IPC形式之一,具有以下特点:

  • 1.数据只能由一个进程流向另一个进程(其中一个读管道,一个写管道);如果要进行双工通信,需要建 立两个管道;
  • 2.管道只能用于父子进程或者兄弟进程间通信。,也就是说管道只能用于具有亲缘关系的进程间通信。

2、管道的命令

command1 | command2 | command3

二、命名管道(FIFO)

1、命名管道的定义和特点

POSIX标准中的FIFO又名有名管道或命名管道。我们知道前面讲述的POSIX标准中管道是没有名称的,所以它的最大劣势是只能用于具有亲缘关系的进程间的通信。FIFO最大的特性就是每个FIFO都有一个路径名与之相关联,从而允许无亲缘关系的任意两个进程间通过FIFO进行通信。所以,FIFO的两个特性:

  • 1.和管道一样,FIFO仅提供半双工的数据通信,即只支持单向的数据流;
  • 2.和管道不同的是,FIFO可以支持任意两个进程间的通信。

2、命名管道的使用

下面是FIFO的接口定义:

#include <sys/types.h>  
#include <sys/stat.h>  
/ /成功则返回0,失败返回-1 
int mkfifo(const char *pathname, mode_t mode);  

总结

    1. 管道是一个环形队列缓冲区,允许两个进程以生产者消费者模型进程通信。是一个先进先出(FIFO)队列,由一个进程写,而由另一个进程读。
    1. 管道在创建时获得一个固定大小的字节数。当一个进程试图往管道中写时,如果有足够的空间,则写请求立即被执行,否则该进程被阻塞。如果一个进程试图读取的字节数多于当前管道中的字节数,也将被阻塞。
    1. 操作系统强制实行互斥,只能有一个进程可以访问管道。
    1. 只有有血缘关系(父子关系)的进程才可以共享匿名管道,不相关的进程只能共享命名管道。
posted @ 2022-11-13 22:45  wysl  阅读(117)  评论(0编辑  收藏  举报