多进程之有名管道、无名管道

管道:一种进程间通讯且是一种半双工的通讯方式,即在同一时间内只能由一方往管道发送或者接收数据(管道操作其实有点类似于我们往一个文件写入数据,另一个进程就把里面的数据读取出来)


(下面是关于管道的简单介绍 , 某位不知名灵魂画手在线画图)
管道

小绿和小红是一对让人羡慕的情侣,他们分别居住在一条河的两边(别问为什么他们在河两边,因为我不想让他们在一起),然后小绿就想和小红聊天,但是他们之间有一条河,然后小红过不去,小绿又想和小红聊天;那怎么办,总不能分手吧,这个时候就需要一个中间介质管道(类似我们的对讲机,同一时刻只能一方讲话一方听),有了中间介质之后呢,小红和小绿就可以两个人一起聊天了,但是呢,聊天嘛就只能一个说,一个听,不然大家一起说时就会什么都听不见;为了避免出现这种情况,于是设计管道时便规定了管道只能是半双工的形式通讯;这个中间介质就是我们的管道


管道分类:

一、无名管道pipe : 只能在由亲缘关系的进程间通讯,本质是一块物理内存,子进程它的管道文件描述符通过父进程继承而来;其中管道的读端和写端是分开的(在创建时需要传递一个int数组进行接收管道文件的操作符),且默认管道文件操作符第0即pipefd[0]为读端,第1即pipefd[1]为写端


================================================

相关函数原型:
//函数头文件
 #include <unistd.h>

//函数原型
 int pipe(int pipefd[2]);


//函数介绍:
/****************************************************
函数作用:用于在父子进程间创建一个无名管道进行通讯

函数形参:pipefd[2]:一个用于接收无名管道读写文件描述符的,
 					数组大小为2的数组
	


函数返回值:
			成功: 0
			失败: -1
***************************************************/



测试代码:
/*
 *测试:无名官道pipe父子进程间通信
 *pipefd[2]---->管道文件描述符:
 *								第一个代表读端
 *		  						第二个代表写端
 */

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <string.h>

int main(int argc, const char **argv)
{
   
	//定义一个数组用于接收管道文件描述符
	int pipefd[2];
	//创建管道
	pipe(pipefd);

	//创建子进程
	pid_t id = fork();
	
	//判断创建子进程是否成功,失败则直接结束整个程序
	if(id == -1)
	{
   
		perror("fork failed!");
		return -1;
	}

	 //子进程要做的事情
	else if(id == 0)
	{
   
		//定义一个数组用于存放从管道中读取到的数据
		char buf[20
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值