Linux进程通信之管道
进程间完成数据传递需要借助操作系统提供的特殊的方法,比如:文件、管道、信号、共享内存、消息队列、套接字、命名管道等。但现在常用的进程间通信方式有:
管道 – 使用最简单
pipe
管道一般读写行为
FIFO(有名管道):
用于非血缘关系进程间通信
信号 – 开销最小
共享映射区 – 无血缘关系
nmap
函数的参数使用注意事项
用于非血缘关系进程间的通信
本地套接字 – 最稳定
Linux下其中文件类型
- 文件
d 目录
l 符号链接
伪文件:
s 套接字
b 块设备
c 字符设备
p 管道
其中文件、目录、符号链接是占用磁盘存储的。
管道:
- 本质是一个伪文件
- 由两个文件描述符引进,一个表示读端,一个表示写端。
- 规定数据从管道的写端流入管道,从读端流出。
管道的原理:管道实为内核使用环形队列机制,借助内核缓冲区(4K)实现。
管道的局限性:
- 数据自己读不能自己写
- 数据一旦被读走,就不在管道中存在,不可反复读取。
- 由于管道采用半双工方式,因此,数据只能在一个方向上流动。
- 只能在由公共祖先的进程间使用管道。
pipe()函数实现管道通信:
/*** pipe.c ***/ #include<stdio.h> #include<unistd.h> #include<stdlib.h> #include<string.h>int main() {int fd[2];pid_t pid;int ret = pipe(fd);if(-1 == ret){perror("pipe error:");exit(1);}pid = fork();if(-1 == pid){perror("pipe error:");exit(1);}else if(0 == pid) //son process read {close(fd[1]);char buf[1024];ret = read(fd[0],buf,sizeof(buf));if(0 == ret){printf("ret = %d\n",ret);}write(STDOUT_FILENO,buf,ret);}else //father process write {sleep(1);close(fd[0]);write(fd[1],"hello pipe\n",strlen("hello pipe\n"));}return 0; }
转载于:https://www.cnblogs.com/wanghao-boke/p/11311586.html
Linux进程通信之管道相关推荐
- Linux进程通信——匿名管道、命名管道、管道的特性和共享内存
Linux进程通信--匿名管道.命名管道.管道的特性和共享内存 一.管道 1.1 什么是管道? 1.2 匿名管道 <1> 匿名管道参数说明 <2> fork共享管道原理 < ...
- Linux进程通信的四种方式——共享内存、信号量、无名管道、消息队列|实验、代码、分析、总结
Linux进程通信的四种方式--共享内存.信号量.无名管道.消息队列|实验.代码.分析.总结 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须 ...
- linux进程管道通信缺点,Linux进程通信(IPC)的方式详解
前言:Linux进程通信的方式 什么是进程通信?进程通信是指进程之间交换信息 进程通信方式共有6种: 管道(pipe),包括流管道(s_pipe)和有名管道(named pipe) 信号(signal ...
- 【操作系统实验】Linux进程通信—共享内存通信、管道通信
Linux进程通信-共享内存通信.管道通信 一.实验目的: 二.实验题目: 1. 试设计程序利用共享内存完成如下进程通信 1.shmget函数 2.shmat函数 3.shmdt函数 4.shmctl ...
- Linux进程通信的试验
1.实验目的 1.1了解Linux进程通信的概念. 1.2 掌握Linux进程通信的常用方法. 2.实验内容 创建admin用户,密码也是admin. 用admin登陆后,创建src目录,所有的源代码 ...
- Linux进程通信(一)——pipe管道
本章内容 采用pipe管道如何进行进程之间的通信 pipe管道进程通信的规则和限制 Linux中pipe管道的实现机制和管理pipe管道的结构体 什么是进程通信 进程通信就是两个进程之间进行数据交换, ...
- Linux进程通信-管道
用户空间进程间通信不可以,如何解决?通过内核空间对象--通信方式 线程间通信?可以在用户空间进行通信,通过全局变量. 线程通信的思路:基于文件io(函数方式不一样) 由此发现,管道通信也如此 通信方式 ...
- linux通信管道破裂,Linux下进程通信之管道
每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把 ...
- 【Linux系统编程】进程通信之管道
1.进程间通信介绍 1.1 进程通信的基本概念 在之前我们已经学习过进程地址空间.Linux 环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间.任何一个进程的全局变量在另一个进程中都看不 ...
最新文章
- 【卷积神经网络结构专题】经典网络结构之VGG(附代码实现)
- python 魔法参数*argv 和 **kw
- 关于将struts2框架下,使自定义过滤器对部分的action(一个action或多个action)请求忽略的方法
- FastDFS的安装
- Mat矩阵(图像容器)的创建及CV_8UC1,CV_8UC2等参数详解
- Entityframework Code First 系列
- SparkSQL报错:UnresolvedException: Invalid call to dataType on unresolved object, tree: 'bb
- java分布式事务 实例_spring整合atomikos实现分布式事务的方法示例
- jQuery实用Ajax loading旋转指示器插件
- 如今前端程序员还有前途吗?
- 终于把W32.Spybot.Worm给消灭了(这个标题不能用了)
- JAVA工具类之URL(编码、解码、参数解析)
- 手机文字转语音简单方法分享
- Dockerfile概念简介
- 广州uc优视java面试_UC优视(UC浏览器)面试经验
- 【黑灰产犯罪研究】恶意点击
- 七阶拉丁方阵_关于拉丁方阵教学的思考
- iOS UITextField设置数字键盘
- 惠普服务器停电后进不了系统,惠普电脑出现了startup menu 然后按f10进不去bios。进入的是Windows启动项...
- Qt Designer+PyQt5 控件使用经验(不定时随缘更新)
热门文章
- python之路-SQLAlchemy
- Ajax_ASP.NET 添加 Ajax 和客户端功能_01
- 网络上各台计算机语言,人类使用语言来交流,同样,网络上的各台计算机之间也用某种语言交换信息,这样的语言通常指()。...
- pdf打印机安装程序_CAD快速出打印PDF格式文件
- 学计算机的误解,让人误解的六大专业
- niosii spi 外部_基于Nios_II的DMA传输总结
- python循环for不从零开始_Python-多处理-巨大的for循环
- matlab if m不等于0,matlab问题clearfor a=0.1:0.1:50for b=0.1:0.1:20for m=0.1:0.1:5
- 单路电压表c语言编程,用AT89C51单片机制作的数字电压表
- flask mysql分页,Flask分页的实现方法