Linux—进程间通信和同步(命名管道FIFO)

目录

1. 命名管道

1.1 创建FIFO(命名管道)

1.2 FIFO操作


在Linux下的多个进程间的通信机制叫做IPC(进程间通信(Inter-Process Communication)),它是多个进程之间相互沟通的一种方法。在Linux下有多种进程间通信的方法:半双工管道、FIFO (命名管道)、消息队列、 信号量、共享内存等。使用这些通信机制可以为Linux下的网络服务器开发提供灵活而又坚固的框架

1. 命名管道

命名管道的工作方式与普通的管道非常相似,但也有一些明显的区别。

在文件系统中命名管道是以设备特殊文件的形式存在的

不同的进程可以通过命名管道共享数据

1.1 创建FIFO(命名管道)

有许多种方法可以创建命名管道。

其中,可以直接用shell来完成。例如,在目录/tmp下建立一个名字为namedfifo的命名管道:

可以看出namedfifo的属性中有一个p,表示这是一个管道。

为了用C语言创建FIFO,用户可以使用mkfifo()函数。

#include 

#include 

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

1.2 FIFO操作

对命名管道FIFO来说,IO操作与普通的管道IO操作基本上是一样的,二者之间存在着一个主要的区别。

在FIFO中,必须使用一个open()函数来显式地建立连接到管道的通道。一般来说FIFO总是处于阻塞状态。也就是说,如果命名管道FIFO打开时设置了读权限,则读进程将一直“阻塞”,一直到其他进程打开该FIFO并且向管道中写入数据。这个阻塞动作反过来也是成立的,如果一个进程打开一个管道写入数据,当没有进程从管道中读取数据的时候,写管道的操作也是阻塞的,直到已经写入的数据被读出后,才能进行写入操作。如果不希望在进行命名管道操作的时候发生阻塞,可以在open()调用中使用 O_NONBLOCK标志,以关闭默认的阻塞动作。

你可能感兴趣的:(Linux)