LINUX多线程pipeline架构的创建分析

参考:       

LINUX多线程pipeline架构的创建分析         铁匠Smith先生的专栏-CSDN博客

Linux操作系统进程间通信方式:管道(Pipeline)    APlus-CSDN博客

pipeline(管道,流水线)是Linux进程间的一种通信方式,两个进程可以通过一个共享内存区域来传递信息,并且管道中的数据只能是单向流动的,也就是说只能有固定的写进程和读进程。

管道可以分为两种类型:匿名管道命名管道

匿名管道

匿名管道只能在父子进程间进行通信,其具体读写规则有:

1.管道内无数据时,读端会发生阻塞直到有数据可读

2.管道数据满时,写端会发生阻塞,直到读端开始读取数据

3.如果写端对应的文件描述符被关闭,read函数返回0,但可以将数据读完

4.如果读端对应的文件描述符被关闭,在执行write函数时会产生SIGPIPE信号,其默认行为会导致当前进程终止。

匿名管道中的数据是存储在内存中的。

可通过函数pipe创建一个匿名管道,匿名管道相关的函数定义于头文件unistd.h中:

-----------------------------------------------------------------------------------------------------------------------------------------------

命名管道

命名管道本质上是一个管道文件,它基于文件系统来实现进程间的通信,其读写端进程可以不是父子进程的关系,只需要进程有权限访问该管道文件即可。需要注意的是,命名管道中的数据实际上是存储在内存中,管道文件在文件系统中相当于是一个标记。

创建命名管道有两种方式:

在命令行界面通过命令mkfifo filename创建命名管道文件,可以指定其文件名

在程序内部调用mkfifo函数(定义于头文件sys/stat.h中),参数filename为管道文件路径,mode为管道文件读写权限:

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

1

命名管道的读写机制和匿名管道相似。

只不过在使用前我们需要调用open函数来打开管道文件,通过其返回的文件描述符来读写管道文件。

————————————————

版权声明:本文为CSDN博主「A__Plus」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/abc123lzf/article/details/101355944

你可能感兴趣的:(LINUX多线程pipeline架构的创建分析)