linux----------2--3----(无名)管道通信原理及管道编程实战
IPC的方式通常有管道(无名管道和命名管道),消息队列,信号量,共享存储,socket,streams等,其中socket和streams支持以不同主机上的两个进程IPC。(笔试题或面试可能会考,记住)
管道:(无名管道)
1.特点:
a 它是半双工的(数据只能在是单向的,只能一个写一个读,管道读走就没了),具有固定的读端和写端
b他是能用于具有亲属关系的进程之间的通信(父子进程或兄弟进程)
c 一种特殊的文件,只存于内存中,之建立在通信当中,父进程或子进程退出,管道消失,
管道是基于文件描述符的通信方式。当一个管道建立时,它会创建两个文件描述符fd[0]和fd[1]。其中fd[0]固定用于读管道,而fd[1]固定用于写管道。
原型:
1)父进程创建管道,得到两个⽂件描述符指向管道的两端
(2)父进程fork出子进程,⼦进程也有两个⽂件描述符指向同⼀管道。
(3)父进程关闭fd[0],子进程关闭fd[1],即⽗进程关闭管道读端,⼦进程关闭管道写端(因为管道只支持单向通信)。⽗进程可以往管道⾥写,⼦进程可以从管道⾥读,管道是⽤环形队列实现的,数据从写端流⼊从读端流出,这样就实现了进程间通信。
————————————————
本文为CSDN博主「木下 似水」的原创文章
返回值为-1,创建管道失败 为0 ,创建成功
int main(){// int pipe(int pipefd[2]);int fd[2]; // promolepid_t pyd;char buf[128];pipe(fd);if(pipe(fd)==-1){printf("creat pipe error!\n");}pyd=fork(); //pid_t fork(void);if(pyd<0){printf("creat fork error!\n");}else if(pyd>0){printf("the is father fork\n");close(fd[0]);write(fd[1],"pengyuandan hard success",strlen("pengyuandan hard success"));wait();}else{printf("the is chile fork\n");close(fd[1]);read(fd[0],buf,128);printf("buf byte= %d ,buf data=%s\n",strlen(buf),buf);exit(0);}// ssize_t read(int fd, void *buf, size_t count);// ssize_t write(int fd, const void *buf, size_t count);
return 0;
}
运行结果为
the is father fork
the is chile fork
buf byte= 25 ,buf data=pengyuandan hard successv
也可以在父进程中加入sleep();等待子先写,当是子进程没有写入的内容,所以会出现堵塞
因为父子进程共用一个管道,所以父进程写入,子进程可以读出
linux----------2--3----(无名)管道通信原理及管道编程实战相关推荐
- linux进程通信1:进程通信概述,管道通信原理(无名管道,有名管道),管道编程实战
进程通信概述,管道通信原理(无名管道,有名管道),管道编程实战 1.进程间通信概述: 举例1: 你手机微信和别人手机微信通信 举例2: 如:父子进程wait 和 exit之间的通信 进程间通信(IPC ...
- 命名管道(FIFO) Linux进程进程间的通信之命名管道(FIFO)
Linux进程进程间的通信之命名管道(FIFO) 命名管道(FIFO),它和一般的管道一样.都是作为中间的邮递员来实现两个进程间的通信交流. 命名管道(FIFO)有几个特点: 1.命名管道(FIFO) ...
- 【学习笔记5】管道通信:命名管道
目录 一.前言 二.基本概念 三.命名管道的创建和使用 3.1 函数原型 3.1.1 CreateNamedPipe 3.1.2 ConnectNamedPipe 3.1.3 WaitNamedPip ...
- linux 运维高级脚本生成器,Linux运维系列,Shell高级脚本自动化编程实战
课程文件目录: Linux自动化运维系列 Shell高级脚本自动化编程实战 [6.1G] ┣━━01.Shell基础概述 [315.1M] ┃ ┣━━1-1 Shell脚本体系概述.mp4 [154. ...
- Linux eBPF 程序构成与通信原理
作者简介:Daemon.Wu, Linux 内核性能优化工程师,就职于某微小手机厂从事手机性能优化.座右铭:知行合一. 原创雄文:由泰晓读者投递的各类社区原创好文. 版权声明:本文最先发表于 &quo ...
- java网络编程的通信原理_11 - 网络编程之设备间通信原理
一.网络编程 1表现形式:一台机子上的应用程序和另外一个设备的程序之间能够互相交换数据. 2 7层网络结构 硬件层:解决硬件连接问题 数据链路层:解决硬件之间能够向指定设备传输数据 IP:为设备提供一 ...
- Liunx系统编程篇—进程通信(二)无名管道(原理、创建、实战)命名管道(原理、创建、实战)
一.无名管道 管道,通常指无名管道(之所以叫无名管道是因为,没有文件名),是 UNIX 系统IPC最古老的形式. 特点 (1)它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端. (2) ...
- Linux中消息机制的通信原理,android QMI机制---概论
前言: Qualcomm MSM Interface,作用用于AP和BP侧的交互,通俗说法就是让设备终端TE(可以是手机,PDA,计算机) 对高通BP侧的AMSS系统进行操作,如调用函数,读取数据,设 ...
- Linux系统无名管道通信实验,Linux进程间通信(二)---管道通信之无名管道及其基础实验...
管道简介 管道是Linux中进程间通信的一种方式,它把一个程序的输出直接连接到另一个程序的输入(其实我更愿意将管道比喻为农村浇地的管子).Linux的管道主要包括两种:无名管道和有名管道.这一节主要讲 ...
最新文章
- gear s3刷android wear,3星gear|3星gear s3自动选择手表刷机办法图文详细教程以及风险介绍...
- linux /dev/snd,linux – / dev / tcp去了哪里?
- python语言入门书籍推荐-入门python有什么好的书籍推荐?
- 产品工作中保持饥饿感,保持拒绝90%以上的伪需求你就不会错过下一个微信
- 销售订单行项目的装运点字段确认规则
- 重新想象 Windows 8 Store Apps (27) - 选取器: 联系人选取窗口, 自定义联系人选取窗口...
- 上海职称英语计算机取消,小编简析2017年职称英语考试是否取消
- Visual Studio 编译优化选项:Debug与Release、禁止优化与O1、O2、Ox优化
- android应用控制百度地图,Android中应用百度地图API开发地图APP实例-显示百度地图...
- 基于JAVA+SpringMVC+Mybatis+MYSQL的高校运动会管理系统
- Leetcode学习成长记:天池leetcode基础训练营Task02链表
- 发布自己的CocoaPods的步骤
- c语言创建一个文本文件datadat,c语言文件选择题.docx
- 姜启源《数学模型》第12章:马氏链模型
- 3D开源游戏引擎(遵循BSD和MIT)
- GPS模块数据分析 -- linux
- 疫情期间的中老年众生相:刷抖音/云买菜/直播购物,加速“触网”
- php获取steam装备信息,api – 获取某人的Steam库存
- selenium tbody表单获取封装函数
- 杂篇:Java源码阅读绘图规范手册--[捷特版]