进程间通讯之有名管道

Posted 邢亚柯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程间通讯之有名管道相关的知识,希望对你有一定的参考价值。

   进程通信是指在进程间交换信息(传输数据)。目前的计算机系统均提供了多任务并行环境,无论是应用程序还是系统程序,都需要针对每一个任务创建相应的进程。

每个进程之间都是相互独立的,不同的进程运行在各自不同的内存空间中,因此,进程之间的信息传递不可能通过变量或其他数据结构直接进行,只能通过进程间通讯完成。

   进程间通讯方式:信号 、管道、信号量、消息队列、共享内存、Socket

 

今天介绍一下通过管道进行程序间的通讯。管道分为有名管道和无名管道。

 

(管道文件)(半双工通讯:数据流向是单向的。)

  有名管道:在文件系统中存在一个文件标识(文件名),但是管道文件不占据磁盘空间,需要传递的数据缓存在内存区域。可用于运行与通一系统中的任意两个进程。(有属性信息,inode节点存在磁盘上)

  无名管道:用于父进程和子进程间的通信。无属性信息,没有inode节点了。

  之前我们可以通过文件可以互相获取数据。(将数据放在磁盘)通过i/o获取(慢)

 

 

管道文件创建:(命令)mkfifo  文件名

                         (函数)Int mkfifoconst char *pathname mode_t mode

                          第一个参数将要在文件系统中创建一个专用文件,第二个参数来规定FIFO的读写权限。

              不能用open创建一个管道文件

管道文件的操作:

   打开 int open(char *path ,int flag )

   读: int read ( int fd ,void *buff,size_t   size)

   写: int write(int fd ,void *buff, size_t  size)

   关闭 int  close(int fd)

 

 

1、open以只读打开一个管道文件,open会阻塞运行,直到有一个进程以只写或读写打开管道文件。

2open以只写打开一个管道文件,open会阻塞运行,直到有一个进程以只读或读写打开管道文件。

3read函数也会阻塞运行,直到管道中有数据或关闭。

4write函数也会阻塞运行,当写的太多被写满了就阻塞运行要等数据读走才能接着写。

 

 

以上是关于进程间通讯之有名管道的主要内容,如果未能解决你的问题,请参考以下文章

进程间通讯

Linux 进程间通讯详解一

进程间的通讯方式有几种?有啥优缺点

IPC(进程间的通讯方式)

进程间通讯机制

IPC进程间通讯之二管道Pipe