概述:
实际上我们多进程的管道使用时,是可以同时有多个读端和写端的。但是这个例子在平时不常用。下面我们只演示多个写端和一个读端的案例。
是否允许,一个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的先打的概率比较大。
文章浏览阅读1.6k次。本文主要讲述过去一年内可观测平台 SLS 的改进和迭代。_数据中台 告警系统
文章浏览阅读854次。昨天在win7上装SQLServer数据库,写一下体会。首先,如果以前安装的话,要删除干净。我也找了半天的网络资料。1.把原来SQLServer的安装目录 C:\Program Files\Microsoft SQL Server 删除2.所有SQLServer相关的注册表全部删除,保证系统是没有装过SQLServer的状态注册表打开方式:开始-->运行-->rege_ghost封装sql 2000
文章浏览阅读235次。关于android开发设置View Pager的直接跳转页set CurrentItem会阻塞主线程ANR。根据网上解决的说法,分析源码:if (mFirstLayout) { // We don't have any idea how big we are yet and shouldn't have any pages either. // Just..._viewpager#mfirstlayout
文章浏览阅读1.1k次。Windows下Nginx负载均衡配置和优化方案方案配置的环境:安装环境:Windows系统Nginx版本:nginx-1.18.0代理网站服务器:Windows server系统1.Nginx下载进入下载地址:http://nginx.org/en/download.html选择Windows版本进行下载。2.Nginx安装2.1解压安装将下载好的Nginx压缩文件解压在相关的安装位置,建议放在非C盘的根目录下,原因是网站访问量大时,产生的日志容量会很大,从而占据C盘的存储空间,增加_windows nginx优化
文章浏览阅读640次。以下是基于小程序wux框架中refresh组件拓展的小程序滚动切换页码组件。用法<page-list id="wux-refresher" elid="biddingList" isShowPage="{{false}}" bind:scrollbot="scrollbot" bind:refresh="onRefresh"> <template is="b..._wux-refresher loadmore
文章浏览阅读2.3k次。由于服务器断电,启动 oracle 时报 ORA-00600 错误查看 oracle trace 日志1. 执行 sqlplus 登录 oraclesqlplus / as sysdba1.2 启动,报错信息如下SQL> startupORACLE instance started.Total System Global Area 583008256 bytesFix_ora-00600: internal error code, arguments: [kgepop: no error frame to pop to
文章浏览阅读1.5k次。修改/etc/my.cnfcharacter-set-server=utf8[client]default-character-set=utf8注释掉 sql_mode重新新建mysql表在hive的元数据库中执行以下SQL语句,然后重新创建刚才的表即可 。alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;alter table TABLE_PARAMS modify column PAR_sqoop --default-character-set=utf8
文章浏览阅读845次。一、简介 在用python写脚本时,通常需要处理xml格式的文件或字符串。由于json格式处理的方便性, 我们可将其转为json格式进行处理。 二、步骤 1、安装工具包xmltodict 在命令行输入:pip install xmltodict 2、在代码使用xmltodict.parse(xml_str)进行处理 如 def load_json(xml_path): #获取xml文件 xml_f..._python xml 转json 格式
文章浏览阅读1.6k次。1111_mybatis sql 标签里面写入参
文章浏览阅读661次。比如说:模板书写:{'param1'|functionName:'param2':'param3'}php函数原型:echo functionName('param1','param2','param3');实例:{'1234567'|substr_smarty中的内置函数可以实现邮件链接的是
文章浏览阅读2.4k次。转载:https://towardsdatascience.com/ensemble-methods-bagging-boosting-and-stacking-c9214a10a205作者:Joseph Rocca Ensemble methods: bagging, boosting andstackingIntroduction“Unity is ..._bagging方法结合深度学习模型
文章浏览阅读6.7k次。//返回文件名称(文件夹读取文件)public static ArrayList<String> getFilesPath(String path) throws Exception {//目标集合fileListArrayList<String> fileList = new ArrayList<String>();File file = new ..._文件的创建和删除java