当前位置: 首页 > java >正文

Linux--管道(pipe)

管道(pipe)
常用于父子进程,也用于有血缘关系的进程间的通信。
在这里插入图片描述
匿名管道所提供的进程间通信方式是单向的(只能是父读子写或父写子读,读写不能同时进行),且:

  1. 写端不关闭且不写,读端读完缓冲,此时阻塞;
  2. 读端关闭,写端还在操作,则写端进程异常而终止(收到SIGPIPE信号);
  3. 读端不关,写端写满缓冲区,此时写端阻塞,直到缓冲区为空。

使用pipe()函数进行父子进程间通信

基本步骤:

  1. 父进程创建管道,获取到指向管道的读、写两个文件描述符,fd[0]指向读端,fd[1]指向写端;
  2. fork出子进程,此时子进程也有两个读、写文件描述符指向相同的管道;
  3. 以父写子读为例,父进程关闭读端,子进程关闭写端,父进程写入数据,子进程读取数据。

父写子读代码实现:

#include<stdio.h>
#include<unistd.h>
#include<errno.h>
int main(int argc,char **argv)
{int pipe_fd[2];pid_t pid;//创建管道if(pipe(pipe_fd) < 0){perror("pipe fail:");return -1;}printf("pipe ok\n");//创建子进程pid = fork();if(pid < 0){perror("fork fail:");return -1;}if(pid == 0){char c_buf[1024];printf("创建子进程\n");close(pipe_fd[1]);//关闭子进程读端int ret = read(pipe_fd[0],c_buf,sizeof(c_buf));if(ret < 0){perror("read fail\n");return -1;}printf("子进程读到:%s\n",c_buf);close(pipe_fd[0]);printf("子进程退出\n");return 0;}if(pid > 0){char p_buf[] = "hello child pross";close(pipe_fd[0]);//关闭父进程写端printf("父进程\n");write(pipe_fd[1],p_buf,sizeof(p_buf));printf("父进程写完成\n");close(pipe_fd[1]);printf("父进程退出\n");return 0;}
}

运行效果:
在这里插入图片描述
子进程中,并无sleep等函数,而父子进程各自运行,但是依然能确保子进程收到数据,因为read函数为阻塞函数,阻塞直到接收到数据,即遵循:管道内部处理了数据写完成然后才能读的机制

多对一的管道:

  1. 多个写进程关闭写管道后,读进程继续读管道会导致read返回0;
  2. 多个读进程关闭读管道后,写进程继续写管道并不会激发SIGPIPE信号,而是写成功返回。
http://www.xdnf.cn/news/11521.html

相关文章:

  • 如何防御流量攻击
  • 华创e路航固件_华创e路航地图官方版
  • 超详细实用ExpandableListView教程(有图有真相)
  • ctf.show的SQL注入(web171-web253)
  • linux下boot文件是什么文件,Boot.ini是什么文件?Boot.ini文件在哪里
  • 【其它】Nook HD刷机
  • jdk1.5、6、7、8、9、10、11、12等windows、linux各个版本下载
  • 当编程语言都变成女孩子
  • Windows Live Writer离线博客工具使用教程(适用于博客园、CSDN、51CTO等等博客)
  • 解读名表二级市场遭遇遇冷的“真相”,凛冬将至!
  • 程序员入门篇(非常详细)零基础入门到精通,收藏这一篇就够了
  • superset 连接时遇到的坑
  • Core文件作用、设置及用法
  • 阿里制造:“犸良”一站式动效制作平台
  • 著名的 P=NP 问题到底是什么?
  • 【Java.Web】JSP —— 语法基础 —— 包含include
  • 如何制作个人网站(如何搭建个人博客)
  • python汇率编程_利用Python中的Xpath实现一个在线汇率转换器
  • 城市轨道交通信号系统学习笔记1--ATC系统概述
  • 模拟摄像机的的“线”与数字相机中的“像素”的关系
  • 中小型企业(公司)网络规划
  • 国内外开源sns源码大全
  • 迅时MX8(FXO)8口语音网关连接Elastix+服务器配置
  • 时间复杂度和空间复杂度详解
  • 点滴收集-Editplus V3/UE V15工具及其它信息(花维 音乐网址)
  • java layout_java layout种类和用途。要详细
  • blog转移
  • HTML学生个人网站作业设计:HTML做一个公司官网首页页面(纯html代码)
  • 空间参考系相关概念
  • 2022起重机司机(限门式起重机)试题及模拟考试