码迷,mamicode.com
首页 > 系统相关 > 详细

进程间通讯之有名管道

时间:2017-11-08 14:59:51      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:多任务   mkf   blog   family   专用   方式   文件系统   lag   文件的   

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

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

   进程间通讯方式:信号 、管道、信号量、消息队列、共享内存、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函数也会阻塞运行,当写的太多被写满了就阻塞运行要等数据读走才能接着写。

 

 

进程间通讯之有名管道

标签:多任务   mkf   blog   family   专用   方式   文件系统   lag   文件的   

原文地址:http://www.cnblogs.com/97-5-1/p/7803618.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!