无名管道通讯编程

创建无名管道用于父子间进程通信。

1、无名管道概念:无名管道又称pipe,是Linux所支持的IPC方式的一种,它具有以下特点:

1)只能用于具有血缘关系的进程之间。

2)属于半双工的通信模式,具有固定的读端和写端

3)是一种特殊的文件,存在于内存中,可通过read、write对其操作。

2、无名管道的用法

因为pipe存在于内存中,所以无法像操作普通文件那样通过指定路径来打开文件。通常的做法是在父进程中创建管道,再创建子进程。由于子进程继承了父进程打开的文件描述符,所以父子进程就可以通过创建的管道进行通信。

为了在父进程中创建管道,需要先定义一个包含两个元素的整型数组,用来存放管道读端和写端对应的文件描述符。该数组在创建管道时作为参数传递。数组的第一个元素固定代表管道的读端,第二个元素代表写端。对于一个进程来说,只会用到其中一个。

3、创建一个无名管道--pipe

头文件:#include<unistd.h>

原型:int pipe(int fd[2])

参数说明:fd[2]:管道的2个文件描述符,管道创建后,可以直接操作这两个文件描述符,其中fd[0]代表读端(管道头),fd[1]代表写端(管道尾)

返回值:成功返回0,失败返回-1.

时间: 2024-08-04 19:40:48

无名管道通讯编程的相关文章

13.无名管道通讯编程

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

无名管道与有名管道通讯编程

管道通讯:一个进程在管道的尾部写入数据,另一个进程从管道的头部读出数据.管道包括无名管道和有名管道两种,前者只能用于父进程和子进程间的通信,后者可用于运行于同一系统中的任意两个进程间的通信. 管道通讯的特点: 1. 管道通讯是单向的,有固定的读端和写端. 2. 数据被进程从管道读出后,在管道中该数据就不存在了. 3. 当进程去读取空管道的时候,进程会阻塞. 4. 当进程往满管道写入数据时,进程会阻塞. 5. 管道容量为64KB(#define PIPE_BUFFERS 16,include/li

第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)管道通讯是单

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

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

有名管道通讯编程

创建2个进程,在A进程中创建一个有名管道,并向其写入数据,通过B进程从有名管道中读出数据. 有名管道又称命名管道,可用于无亲缘关系的进程之间通信,在某些特点上类似于文件. 用法:通过mkfifo创建有名管道,之后就可以想操作普通文件通过open().close().write().以及read()对它进行相应操作. 1.创建一个有名管道--mkfifo 头文件:#include<sys/types.h>,#include<sys/stat.h> 原型:int mkfifo(cons

linux应用开发-无名管道编程

linux应用开发-无名管道编程 一 linux进程间通信(ipc) 1 UNIX进程间通信 2 基于System V的通信 3 POSIX通信 二 七种通信方式 1 管道 一个进程在管道的尾部写入数据,另一个进程从管道的头部 读出数据.管道包括无名管道和有名管道两种,前者只能用 于父进程和子进程间的通信,后者可用于运行于同一系统中 的任意两个进程间的通信. 分类: 无名管道(pipo):用于父进程和子进程间的通信 有名管道(FIFO):用于运行于同一系统中的任意两个进程间的通信 特点: 1 管

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

无名管道通信

一.核心理论 1.进程通信方式(IPC) (1).通讯的目的: 数据传输,资源共享,通知事件,进程控制 (2).通讯的发展:UNIX进程间的通信.基于System V进程间的通信.POSIX进程间通信 (3).通信方式 : 无名管道(pipe),有名管道(FIFO),信号(signal), 消息队列, 共享内存, 信号量, 套接字(socket) 2.管道通信方式(特点) (1).管道通讯是单向的,有固定的读端和写端 (2).数据被进程从管道读出后,在管道中该数据就不存在了 (3).当进程去读取

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

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