进程间通讯之有名管道

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

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

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

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

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

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

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

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

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

(函数)Int mkfifo(const 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会阻塞运行,直到有一个进程以只写或读写打开管道文件。

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

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

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

时间: 2024-11-06 14:43:44

进程间通讯之有名管道的相关文章

进程间通讯之 命名管道

命名管道其实用的还是API函数,我估计是底层应该是操作系统 分配了一块单独的内存空间,两个程序或是多个程序都可以对这块内存进行读写. 这些所谓的管道API函数,就是我们编程人员操作这些内存空间的方法. ××××××××××××××××××××××××××××××××××××× 用到的API函数 管道服务器首次调用CreateNamedPipe()函数时,使用nMaxInstance参数指定了能同时存在的管道实例的最大数目.服务器可以重复调用CreateNamedPipe()函数去创建管道新的实例

管道实现进程间通讯 、WaitNamedPipe

一.管道实现进程间通讯 主要的理论知识 1.什么是管道以及分类 管道是两个头的东西,每一个头各连接一个进程或者同一个进程的不同代码,依照管道的类别分有两种管道,匿名的和命名的:依照管道的传输方向分也能够分成两种,单向的双向的.依据管道的特点,命名管道通经常使用在网络环境下不同计算机上执行的进程之间的通信(当然也能够用在同一台机的不同进程中)它能够是单向或双向的:而匿名管道仅仅能用在同一台计算机中,它仅仅能是单向的.匿名管道事实上是通过用给了一个指定名字的有名管道来实现的. 使用管道的优点在于:读

linux_c开发(5-2)进程间通讯_管道通讯

管道通信 什么是管道? 管道是单向的.先进先出的,他把一个进程的输出和另一个进程的输入连接在一起.一个进程(写进程)在管道的尾部写入数据,另一个进程(读进程)从管道的头部读出数据. 管道创建 管道包括无名管道和有名管道两种,前者用于父进程和子进程间的通讯,后者可用于同一系统中的任意两个进程间的通讯. 无名管道由pipe()函数创建: int pipe(int filedis[2]); 当一个管道建立时,他会创建两个文件描述符: filedis[0]用于读管道,filedis[1]用于写管道. 管

【IPC进程间通讯之二】管道Pipe

IPC进程间通信+管道Pipe         IPC(Inter-Process Communication,进程间通信).         管道用于进程间共享数据,其实质是共享内存,常用IPC之一.管道不仅可以用于本机进程间通信,还可实现跨网络进程间通信,如同Socket通信,管道同样封装计算机底层网络实现,提供一个良好的API接口.                1.管道(Pipe):        管道分为匿名管道和命名管道.        匿名管道只能用于父子进程间通信 ,不能跨网络通

UNIX 进程间通讯(IPC)概念(Posix,System V IPC)

 IPC(Inter-Process Communication,进程间通讯)可以有三种信息共享方式(随文件系统,随内核,随共享内存).(当然这里虽然说是进程间通讯,其实也是可以和线程相通的). 相对的IPC的持续性(Persistence of IPC Object)也有三种: 随进程持续的(Process-Persistent IPC) IPC对象一直存在,直到最后拥有他的进程被关闭为止,典型的IPC有pipes(管道)和FIFOs(先进先出对象) 随内核持续的(Kernel-persist

Linux 进程间通讯方式 pipe()函数 (转载)

转自:http://blog.csdn.net/ta893115871/article/details/7478779 Linux 进程间通讯方式有以下几种: 1->管道(pipe)和有名管道(fifo). 2->消息队列 3->共享内存 4->信号量 5->信号(signal) 6->套接字(sicket) 在这里我们看一下第一种====管道(pipe).有名管道(fifo)见其它文章. eg :我们以前学的命令 cat  file | grep  "abc

进程间通讯

进程间通讯(Inter process communication :IPC) 1>6种进程间通讯: 4种数据共享机制:包括管道(分为无名管道和有名管道),消息队列.共享内存.UNIX域套接字(socket): 1种实现异步机制:信号: 1种实现互斥和同步:信号量: ①.管道(pipe) 管道是一种特殊的文件: 管道是文件:可对它使用文件IO的读写函数: 特殊的:管道是由内核实现的,在内存中文件,它不能使用类似fseek.lseek()的对文件指针的操作:管道是单向的(半双工): (1).无名管

linux_c开发(5-1)进程间通讯_进程间通讯概念

目的:为什么进程间需要通信? 1.数据传输 一个进程需要将他的数据发送给另外一个进程. 2.资源共享 多进程之间共享同样的资源. 3.通知事件 一个进程需要向另一个或一组进程发送消息,通知他们发生了某种事件. 4.进程控制 有些进程希望完全控制另一个进程的执行(eg:debug进程),此时控制进程希望能够拦截另一个进程的所有操作,并能够及时知道他的状态改变. 发展: linux进程间通讯(IPC)由以下及部分发展而来: 1.UNIX间进程通讯 2.基于system v进程间通讯 3.POSIX进

Android(IPC)进程间通讯1:详解Binder由来?

完整原文:http://tryenough.com/android-ipc1 Android开发的进程间通讯,整个Android的应用都依赖于binder做底层通信机制.而Linux中提供的进程间通讯方式并没有binder机制,那么android中为什么要单独创造这种通讯方式呢?带着这个问题,继续往下读. Linux中进程相关概念 Linux将系统内存划分成了 用户空间 和 内核空间 两部分: 用户空间 : 普通应用程序则运行在用户空间上,它们不能使用某些特定的系统功能,不能直接访问硬件,不能直