07LinuxC进程间通信之管道pipe多个写端或者多个读端,案例4(非常重要)_pipe可以有多个读端吗-程序员宅基地

技术标签: Linux系统编程  多进程  unix  

概述:
实际上我们多进程的管道使用时,是可以同时有多个读端和写端的。但是这个例子在平时不常用。下面我们只演示多个写端和一个读端的案例。

1 一个读端多个写端案例

是否允许,一个pipe有一个写端,多个读端呢?是否允许有一个读端多个写端呢?
前面已经说了,是允许的。

#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <string.h>
#include <stdlib.h>

int main(void)
{
    
	pid_t pid;
	int fd[2], i, n;
	char buf[1024];

	int ret = pipe(fd);
	if(ret == -1){
    
		perror("pipe error");
		exit(1);
	}

	for(i = 0; i < 2; i++){
    
		if((pid = fork()) == 0)
			break;
		else if(pid == -1){
    
			perror("pipe error");
			exit(1);
		}
	}

	if (i == 0) {
    			
		close(fd[0]);				
		write(fd[1], "1.hello\n", strlen("1.hello\n"));
	} else if(i == 1) {
    	
		close(fd[0]);				
		write(fd[1], "2.world\n", strlen("2.world\n"));
	} else {
    
		close(fd[1]);       //父进程关闭写端,留读端读取数据    
		//sleep(1);//不加sleep的话,可能兄进程或者弟进程某个写入后,父进程直接读,然后回收兄弟进程后就结束了。导致下一次的数据无法再读取了。
		n = read(fd[0], buf, 1024);     //从管道中读数据
		write(STDOUT_FILENO, buf, n);

		for(i = 0; i < 2; i++)		//两个儿子wait两次
			wait(NULL);
	}

	return 0;
}

可以看到,不加sleep时结果可能打印不全或者内容不一样。
在这里插入图片描述
加上sleep后。虽然结果都是hello之后才world,但是也有可能是先world才hello,只不过因为循环因为i是先创建兄进程,所以hello的先打的概率比较大。
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44517656/article/details/112426461

智能推荐

本文详解5G是个什么鬼,程序员都准备好了吗?-程序员宅基地

文章浏览阅读1.5k次。无线移动通讯发展历史最近5G的概念炒的如火如荼,为此,华为和高通还干了一仗。这篇文章从技术层面给大家分析,什么是5G,它和4G比,高级在哪里?我们来看看移动互联网的技术发展:然后我们在来看看他们之间的通讯速率比较:2G:150Kbps,折合下载速度15-20K/s3G:1-6Mbps,折合下载速度120K/s-600K/s4G:10-100Mbps,折合下载速度1.5M..._5g程序员应该学习什么 site:blog.csdn.net

极智经验 | win10 IE浏览器无法打开网页解决方法_w10系统自带ie打开不了网页-程序员宅基地

文章浏览阅读2k次。大家好,我是极智视界,本文介绍一下 win10 IE浏览器无法打开网页的解决方法。_w10系统自带ie打开不了网页

python编写程序、计算1+3+5+......+99的值_python编写1+(1+3)+(1+3+5)+……(1+3+5+……+n)和的程序...-程序员宅基地

文章浏览阅读1.2w次。python编写1+(1+3)+(1+3+5)+……(1+3+5+……+n)和的程序234游戏网友 提出于 2019-09-15 06:02:35请问:python编写1+(1+3)+(1+3+5)+……(1+3+5+……+n)和的程序采纳答案 欢迎参考下方网址,里面有Python习题跟答案,具体的代码截图,代码思路跟你的差不多,把代码考下来把参数修改一下就可以了网页链接#!/usr/b..._python中1+3+5...+999怎么写

过滤器(Filter)和 拦截器(Interceptor)_过滤器和拦截器-程序员宅基地

文章浏览阅读7k次,点赞9次,收藏34次。过滤器(Filter)和 拦截器(Interceptor) 使用和区别_过滤器和拦截器

graphpad prism怎么添加图例_Graphpad作图,这些技巧你知道吗?-程序员宅基地

文章浏览阅读7.1k次。研究论文中有不少计算药物半抑制浓度IC50的拟合曲线图,可是你知道这种图该怎么做吗?今天笔者给大家分享一下这种拟合曲线图的作图方法。作图工具是Graphpad Prism,打开软件后,选择XY作图方式。将实验所得的数据填写入图表中注意x轴写入的是log[药物],比如说你加入的药物浓度分别为1-100000nM,那首先你必须先将这个浓度进行换算,一个有效的方法就是在Excel中进行计算,通过log[..._graphpad怎么增加曲线对应图例

【jQWidgets】API 笔记_"text\": \"\", \"datafield\": \"\","-程序员宅基地

文章浏览阅读553次。http://www.jqwidgets.com/jquery-widgets-demo/ $("#jqxgrid").jqxGrid({ theme: 'energyblue', altrows: true,//行间底色区分 width: 500, sortable: true,//设置可排序 pageable: tr..._"text\": \"\", \"datafield\": \"\","

随便推点

QT启动外部程序、运行状态监控、搭建运行环境(学习记录)-程序员宅基地

文章浏览阅读2.4k次,点赞3次,收藏21次。和包含启动m_pProcess->start(AA.exe);,外部独立启动时,QT界面的程序输出栏会输出外部程序的调试内容,包含启动方式不显示。QT程序关闭时,包含启动的程序会自动跟随关闭,独立启动的程序仍然会独立运行,无影响。为保持QT程序良好的移植性,可以在程序启动时自动设置临时环境变量,只在QT程序运行时有效,设置完临时环境变量之后再启动m_pProcess。程序启动内部调用cmd启动,直接运行AA.exe,系统无法找到该程序,需指定路径或者将AA.exe路径添加到系统环境中。

Bash/Shell/Shell脚本的关系_bash脚本和shell脚本的区别-程序员宅基地

文章浏览阅读4.6k次,点赞4次,收藏15次。Bash/Shell/Shell脚本的关系1.Shell是什么Shell俗称壳,是指“为使用者提供操作界面”的软件(命令解析器)。Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统程序。(用户<—>Shell<—>内核)Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性强。Shell是解释执行的脚本语言,在S..._bash脚本和shell脚本的区别

Java将数据按列写入Excel并设置格式(字体、背景色、自动列宽、对齐方式等)-程序员宅基地

文章浏览阅读3.3k次,点赞5次,收藏6次。本文使用jxl.jar工具类库将数据按列写入Excel并设置格式(字体、背景色、自动列宽、对齐方式等)。

Android中使用代码开关GPS、移动网络(GPRS)、WiFi_android 网络开关工具 github-程序员宅基地

文章浏览阅读1.1w次。以下方法在2.1中测试成功。理论上2.1以上应该也可以。不过2.1以后的Android版本中已经有提供了相关方法,详见android.provider.Settings.Secure类。记得在AndroidManifest.xml中声明相关权限: android:name="android.permission.ACCESS_NETWORK_STATE"/>_android 网络开关工具 github

go技术日报--2020-05-29_技术日报接口-程序员宅基地

文章浏览阅读745次。go 语言中文网(每日资讯)_2020-05-29一、Go 语言中文网Go 语言之父:拿过奥运银牌,发明过航天望远镜,想用 Go 语言解放程序员!Go Web 开发如何优雅的包含静态资源文件?Go:从 context 源码领悟接口的设计Go 异常处理详解Go Redis 客户端源码阅读(3)协程间的通信二、亚军进化史Go 技术日报(2020-05-28)三、xueyuanjunGo 语言 Web 编程系列(十六)—— 设置、读取和删除 Cookie四、 _技术日报接口

vs2013+NetCDF二维数据的读取方法-程序员宅基地

文章浏览阅读137次,点赞9次,收藏4次。说明:根据自己的实际情况请参考使用,更多问题请参考博客中的其他文章。环境:win7+vs2013+NetCDF4.4.2。

推荐文章

热门文章

相关标签