进程间完成数据传递需要借助操作系统提供的特殊的方法,比如:文件、管道、信号、共享内存、消息队列、套接字、命名管道等。但现在常用的进程间通信方式有:

管道 – 使用最简单

pipe

管道一般读写行为

FIFO(有名管道):

用于非血缘关系进程间通信

信号 – 开销最小

共享映射区 – 无血缘关系

nmap

函数的参数使用注意事项

用于非血缘关系进程间的通信

本地套接字 – 最稳定

Linux下其中文件类型

-       文件

d     目录

l     符号链接

伪文件:

s      套接字

b     块设备

c     字符设备

p     管道

其中文件、目录、符号链接是占用磁盘存储的。

管道:

  1. 本质是一个伪文件
  2. 由两个文件描述符引进,一个表示读端,一个表示写端。
  3. 规定数据从管道的写端流入管道,从读端流出。

管道的原理:管道实为内核使用环形队列机制,借助内核缓冲区(4K)实现。

管道的局限性:

  1. 数据自己读不能自己写
  2. 数据一旦被读走,就不在管道中存在,不可反复读取。
  3. 由于管道采用半双工方式,因此,数据只能在一个方向上流动。
  4. 只能在由公共祖先的进程间使用管道。

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进程通信之管道相关推荐

  1. Linux进程通信——匿名管道、命名管道、管道的特性和共享内存

    Linux进程通信--匿名管道.命名管道.管道的特性和共享内存 一.管道 1.1 什么是管道? 1.2 匿名管道 <1> 匿名管道参数说明 <2> fork共享管道原理 < ...

  2. Linux进程通信的四种方式——共享内存、信号量、无名管道、消息队列|实验、代码、分析、总结

    Linux进程通信的四种方式--共享内存.信号量.无名管道.消息队列|实验.代码.分析.总结 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须 ...

  3. linux进程管道通信缺点,Linux进程通信(IPC)的方式详解

    前言:Linux进程通信的方式 什么是进程通信?进程通信是指进程之间交换信息 进程通信方式共有6种: 管道(pipe),包括流管道(s_pipe)和有名管道(named pipe) 信号(signal ...

  4. 【操作系统实验】Linux进程通信—共享内存通信、管道通信

    Linux进程通信-共享内存通信.管道通信 一.实验目的: 二.实验题目: 1. 试设计程序利用共享内存完成如下进程通信 1.shmget函数 2.shmat函数 3.shmdt函数 4.shmctl ...

  5. Linux进程通信的试验

    1.实验目的 1.1了解Linux进程通信的概念. 1.2 掌握Linux进程通信的常用方法. 2.实验内容 创建admin用户,密码也是admin. 用admin登陆后,创建src目录,所有的源代码 ...

  6. Linux进程通信(一)——pipe管道

    本章内容 采用pipe管道如何进行进程之间的通信 pipe管道进程通信的规则和限制 Linux中pipe管道的实现机制和管理pipe管道的结构体 什么是进程通信 进程通信就是两个进程之间进行数据交换, ...

  7. Linux进程通信-管道

    用户空间进程间通信不可以,如何解决?通过内核空间对象--通信方式 线程间通信?可以在用户空间进行通信,通过全局变量. 线程通信的思路:基于文件io(函数方式不一样) 由此发现,管道通信也如此 通信方式 ...

  8. linux通信管道破裂,Linux下进程通信之管道

    每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把 ...

  9. 【Linux系统编程】进程通信之管道

    1.进程间通信介绍 1.1 进程通信的基本概念 在之前我们已经学习过进程地址空间.Linux 环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间.任何一个进程的全局变量在另一个进程中都看不 ...

最新文章

  1. 【卷积神经网络结构专题】经典网络结构之VGG(附代码实现)
  2. python 魔法参数*argv 和 **kw
  3. 关于将struts2框架下,使自定义过滤器对部分的action(一个action或多个action)请求忽略的方法
  4. FastDFS的安装
  5. Mat矩阵(图像容器)的创建及CV_8UC1,CV_8UC2等参数详解
  6. Entityframework Code First 系列
  7. SparkSQL报错:UnresolvedException: Invalid call to dataType on unresolved object, tree: 'bb
  8. java分布式事务 实例_spring整合atomikos实现分布式事务的方法示例
  9. jQuery实用Ajax loading旋转指示器插件
  10. 如今前端程序员还有前途吗?
  11. 终于把W32.Spybot.Worm给消灭了(这个标题不能用了)
  12. JAVA工具类之URL(编码、解码、参数解析)
  13. 手机文字转语音简单方法分享
  14. Dockerfile概念简介
  15. 广州uc优视java面试_UC优视(UC浏览器)面试经验
  16. 【黑灰产犯罪研究】恶意点击
  17. 七阶拉丁方阵_关于拉丁方阵教学的思考
  18. iOS UITextField设置数字键盘
  19. 惠普服务器停电后进不了系统,惠普电脑出现了startup menu 然后按f10进不去bios。进入的是Windows启动项...
  20. Qt Designer+PyQt5 控件使用经验(不定时随缘更新)

热门文章

  1. python之路-SQLAlchemy
  2. Ajax_ASP.NET 添加 Ajax 和客户端功能_01
  3. 网络上各台计算机语言,人类使用语言来交流,同样,网络上的各台计算机之间也用某种语言交换信息,这样的语言通常指()。...
  4. pdf打印机安装程序_CAD快速出打印PDF格式文件
  5. 学计算机的误解,让人误解的六大专业
  6. niosii spi 外部_基于Nios_II的DMA传输总结
  7. python循环for不从零开始_Python-多处理-巨大的for循环
  8. matlab if m不等于0,matlab问题clearfor a=0.1:0.1:50for b=0.1:0.1:20for m=0.1:0.1:5
  9. 单路电压表c语言编程,用AT89C51单片机制作的数字电压表
  10. flask mysql分页,Flask分页的实现方法