第11课-无名管道通讯

1.进程间通讯的目的
(1)数据传输
(2)资源共享
(3)通知事件
(4)进程控制

2.通讯发展
(1)UNIX进程间通讯
(2)基于System V进程间通讯
(3)POSIX进程间通讯
3.POSIX标准

4.进程间通讯的主要方式
(1)无名管道
(2)有名管道
(3)信号
(4)消息队列
(5)共享内存
(6)信号量
(7)套接字
5.管道通信
(1)一个进程在管道尾部写入数据,另一个进程管道头部读取数据
(2)无名管道:只能用于父进程子进程之间的通讯
(3)有名管道:可以用于任意两个进程间的通讯
6.管道特点:
(1)管道通讯是单向的,有固定的读端和写端
(2)数据被读出以后就不存在管道中了
(3)当进程去读取空管道的时候会阻塞
(4)当进程往满管道中写入数据的时候会阻塞
(5)管道容量是64KB
7.操作无名管道

8.在子进程创建之前要先创建管道,否则父子进程格子创建自己的管道,达不到传输数据的目的。而且在父进程中要调用wait函数,等待子进程的操作完成,否则有可能父进程结束了子进程还没有开始工作。再有就是每一个进程都要有相应的exit(0)保证进程退出,以及每一个对无名管道的读写操作以后,都要有close函数关闭抽象出来的文件。
9.创建无名管道

5.1 创建无名管道

5.1.1 函数名
Pipe
5.1.2 函数原形
int pipe(int pipefd[2]);
5.1.3 函数功能
创建一个管道,使之能用于进程间的通讯
5.1.4 所属头文件
<unistd.h>
5.1.5 返回值
成功:0
失败:-1
5.1.6 参数说明
pipefd[2]保存读端和写端的文件描述符。因为无名管道一旦被创建,就会被抽象成两个文件,一个读端一个写端。第0个元素对应读端,第1个对应写端。直接用文件编程的函数操作无名管道。

时间: 04-15

第11课-无名管道通讯的相关文章

13.无名管道通讯编程

? 1.进程间的通信: Linux作为典型的多进程操作系统,进程与进程之间肯定需要信息交流,这就需要进程通信. 2.进程通信的目的: ????1.数据传输:一个进程需要将数据发送给另一个进程. ????2.资源共享:多个进程之间共享同样的资源. ????3.通知事件:一个进程需要向另一个/组进程发送信息,通知他们发生了某些事情. ????4.进程控制:有些进程希望完全控制另一个进程的执行,例如Debug进程.此时控制进程希望能够拦截另一个进程的所有操作,并能够及时知道他的状态改变. ? 3.通讯

[国嵌攻略][080][无名管道通讯]

通讯目的 1.数据传输 一个进程需要将数据发送给另外一个进程. 2.资源共享 多个进程之间共享同样的资源. 3.通知事件 一个进程需要向另外一个/组进程发送消息,通知它们发生了某事件. 4.进程控制 有些进程希望完全控制另外一个进程的执行,此时控制进程希望能够拦截另外一个进程的所有操作,并能够及时知道它的状态改变. 通信方式 1.无名管道(pipe):数据传输 2.有名管道(fifo):数据传输 3.信号(signal):通知事件 4.消息队列 5.内存共享 6.信号量:资源共享 7.套接字(s

无名管道通讯编程

创建无名管道用于父子间进程通信. 1.无名管道概念:无名管道又称pipe,是Linux所支持的IPC方式的一种,它具有以下特点: 1)只能用于具有血缘关系的进程之间. 2)属于半双工的通信模式,具有固定的读端和写端 3)是一种特殊的文件,存在于内存中,可通过read.write对其操作. 2.无名管道的用法 因为pipe存在于内存中,所以无法像操作普通文件那样通过指定路径来打开文件.通常的做法是在父进程中创建管道,再创建子进程.由于子进程继承了父进程打开的文件描述符,所以父子进程就可以通过创建的

第12课-有名管道通讯

1.有名管道:又称为FIFO文件.2.man命令:1.系统命令,2.系统调用,3库函数3.函数学习5.2 创建有名管道5.2.1 函数名mkfifo5.2.2 函数原形int mkfifo(const char *pathname, mode_t mode);5.2.3 函数功能创建一个fifo文件(有名管道)5.2.4 所属头文件<sys/types.h><sys/stat.h>5.2.5 返回值成功:0失败:-15.2.6 参数说明Pathname:要创建的fifo文件的名字(

Linux简单程序实例(GNU工具链,进程,线程,无名管道pipe,基于fd的文件操作,信号,scoket)

一, GNU工具链简介: (1)编译代码步骤: 预处理 -> 编译 -> 汇编 -> 链接: 预处理:去掉注释,进行宏替换,头文件包含等工作: gcc -E test.c -o test.i 编译:   不同平台使用汇编语言不同,汇编将高级语言编译成汇编语言: gcc -S test.c -o test.s 汇编:   将汇编语言翻译成二进制代码: gcc -c test.c -o test.o 链接:   包含各函数库的入口,得到可执行文件: gcc -o test test.c (2

管道通信之无名管道---pipe()

pipe()函数在子进程产生之前就应该存在. 父子进程之间只进行一次传递 1 /*============================================ 2 > Copyright (C) 2014 All rights reserved. 3 > FileName:onepipe.c 4 > author:donald 5 > details: 6 ==============================================*/ 7 #inclu

进程之间通信之有名管道、无名管道(pipe),笔记

             进程之间的通信作用1.数据传输   :一个进程需要将他的数据传到其他进程2.资源共享3.进程通知事件4.进程控制 :有些进程完全控制另一个进程的执行,如调试状态啊我们需要完全控制他的每一步操作: 通信发展历史Linux进程间的通信IPC由以下几个部分发展而来:1.UNIX进程之间的通信2.基于system v进程间的通信3.POSIX进程之间的通信(portable operating system interface) 现在Linux使用的进程间的通信方式包括:1.管

安卓学习第11课——AutoCompleteTextView

...在百度上搜了这么一段.理解了ArrayAdapter的三个参数的用途 1. 这个小例子是要显示一个数组,我们就用ArrayAdapter,数组适配器,数据的数据类型<>是String类型的,数据的数据类型还可以是其他的包括对象类型的 2. ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(ArrayListDemo.this, android.R.layout.simple_list_item

进程通信-无名管道

无名管道:主要是针对进程通信的(自己感觉它有很大的局限性) 特点:它不是一个文件系统,不能按名访问,这也是它和有名管道之间最大的区别.无名管道只是一个系统内存里面的东西. 半双工模式,数据只能流向一个方向(老师给我们举得例子就是水厂的水到居民用水,不可能倒着流对吧). 进程之间通信,但是只能是有亲缘关系的进程才能进行通信?比如父子进程:因为在父子进程中,子进程拷贝父进程的数据段,这让这两个进程在通信的时候就有了相连的关系. 下面我们来看一下:无名管道的创建,写入,读取,关闭(我用的的是Liunx