首页 > 系统服务 > 详细

进程间通讯之有名管道

时间:2017-11-08 14:05:09      阅读:201      评论:0      收藏:0      [点我收藏+]

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

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

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

 

 

进程间通讯之有名管道

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!