通讯目的

1.数据传输

一个进程需要将数据发送给另外一个进程。

2.资源共享

多个进程之间共享同样的资源。

3.通知事件

一个进程需要向另外一个/组进程发送消息,通知它们发生了某事件。

4.进程控制

有些进程希望完全控制另外一个进程的执行,此时控制进程希望能够拦截另外一个进程的所有操作,并能够及时知道它的状态改变。

通信方式

1.无名管道(pipe):数据传输

2.有名管道(fifo):数据传输

3.信号(signal):通知事件

4.消息队列

5.内存共享

6.信号量:资源共享

7.套接字(socket)

管道通信

一个进程在管道的尾部写入数据,另一个进程从管道的头部读出数据。管道包括无名管道和有名管道两种,前者只能用于父进程和子进程之间的通信,后者可与用于运行与同一系统中的任意两个进程间的通信。

管道通信的特点

1.管道通信是单向的,有固定的读端和写端。

2.数据被进程从管道读出后,在管道中该数据就不存在了。

3.当进程去读取空管道的时候,进程会阻塞。

4.当进程往满管道写入数据时,进程会阻塞。

5.管道容量为64KB。

无名管道

在Linux系统中,无名管道一旦创建完成后,操作无名管道等同于操作文件。无名管道的读端被视作一个文件,无名管道的写端也被视作一个文件。因此可以使用read,write,close等函数来访问无名管道。

#include <stdio.h>
#include <stdlib.h>#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>void main(){//创建管道int pipefd[2];pipe(pipefd);//创建进程int pid;pid = fork();//管道通讯if(pid > 0){//写入数据char wbuf[13] = "hello world!";write(pipefd[1], wbuf, 13);//等待读取
        wait(NULL);//关闭写管道close(pipefd[1]);}else if(pid == 0){//读取数据char rbuf[13];read(pipefd[0], rbuf, 13);//显示数据printf("%s\n", rbuf);//关闭读管道close(pipefd[0]);}//结束进程exit(0);
}

转载于:https://www.cnblogs.com/d442130165/p/5224099.html

[国嵌攻略][080][无名管道通讯]相关推荐

  1. [国嵌攻略][085][共享内存通讯]

    共享内存 共享内存是IPC机制中的一种,它允许两个相关的进程访问同一段内存,这是传递数据的一种有效的方式. A.c #include <sys/types.h> #include < ...

  2. [国嵌攻略][139][输入子系统原理分析]

    输入子系统核心架构 1.设备驱动层 2.核心层 3.事件层 4.用户空间 输入设备注册 1.拿设备ID去匹配handler的ID,找到对应的handler(事件处理者) 最常用的handler是evd ...

  3. [国嵌攻略][084][信号同步编程]

    进程同步 一组并发进程进行相互合作.相互等待,使得各进程按一定的顺序执行的过程称为进程间的同步. 进程同步与进程互斥 进程同步问题的关键在于生产者不需要获取信号量,消费者不需要释放信号量,所以信号量的 ...

  4. [国嵌攻略][125][总线设备驱动模型]

    总线模型 随着技术的不断进步,系统的拓扑结构也越来越复杂,对热插拔,跨平台移植性的要求越来越高,2.4内核已经难以满足这些需求.为了适应这种形势的需要,从Linux2.6内核开始提供了全新的设备驱动模 ...

  5. [国嵌攻略][038][时钟初始化]

    时钟脉冲信号 按一定的电压幅度,一定的时间间隔连续发出的脉冲信号叫做时钟脉冲信号.用于给处理器和其他硬件提供时钟度量. 时钟脉冲频率 在单位时间内产生的时钟脉冲的个数叫做时间脉冲频率 时钟源分类 1. ...

  6. [国嵌攻略][054][NandFlash驱动设计_写]

    Nand Flash支持按页写和随机写两种方式,在下面实现的是按页写.闪存在写数据时,只能写入1,不能写入0,所以写函数必须和擦除函数一起使用,并且擦除函数是按块擦除. /************** ...

  7. 13.无名管道通讯编程

    13.无名管道通讯编程 1.进程间的通信: Linux作为典型的多进程操作系统,进程与进程之间肯定需要信息交流,这就需要进程通信. 2.进程通信的目的: 1.数据传输:一个进程需要将数据发送给另一个进 ...

  8. Algorithm:数学建模大赛(国赛和美赛)的简介/内容、数学建模做题流程、历年题目类型及思想、常用算法、常用工具之详细攻略

    Algorithm:数学建模大赛(国赛和美赛)的简介/内容.数学建模做题流程.历年题目类型及思想.常用算法.常用工具之详细攻略 目录 国内数学建模大赛简介 1.本科生数学建模大赛 2.研究生数学建模大 ...

  9. 潘多拉_最新Pandora潘多拉美国官网海淘攻略

    潘多拉相信没有女生是不喜欢的,Pandora的串珠和首饰一直是少女心的存在,BlingBling闪亮亮充满着幻想的气息.Pandora总是有一种蜜汁魔力,每次看见打折的款式总是忍不住要剁手!买回来和之 ...

最新文章

  1. 如何在HTTP POST请求中发送参数?
  2. 冬天了,麦克风/话筒 有杂音 的原因!
  3. hdu 1003 A + B Problem II 使用整型数组轻松实现大数求和
  4. c++median search中位数搜索的实现算法(附完整源码)
  5. python中怎么计数_浅谈python中统计计数的几种方法和Counter详解
  6. 【Python2】Keras_ResNet 在Cifar10数据集上分类,Flask框架部署目标检测模型
  7. python全局名称空间_python之名称空间知识点整理
  8. o.s.b.d.LoggingFailureAnalysisReporte报错
  9. MySQL笔记创建表结构_MySQL表结构笔记9
  10. 数据镜像备份工具rsync + inotify
  11. 0626 Django模型(ORM)
  12. React Native开发总结(一)
  13. UVA10268 498-bis【多项式】
  14. 一篇文章搞定Python多进程
  15. java汉字的编码_Java中文编码小结
  16. vbs表白代码+整人代码,抖音vbscript表白代码
  17. 浅谈一下workstation
  18. 天涯 大神 kkndme 房地产 调控
  19. 小程序嵌套h5界面,在h5界面调用小程序的扫一扫功能(自用方法3)
  20. php爬拉钩数据,拉勾网数据两种爬取

热门文章

  1. 探访2019世界人工智能大会:AI应让人类生活得更幸福
  2. java 链表 传递_java 链表 传递过程中的问题
  3. Java移除ssl认证_Java SSL证书吊销检查
  4. pythontuple数据类型_Python数据类型之元组的详细介绍
  5. linux基础试卷笔试,顽石系列:Linux基础笔试
  6. Java三大特性: 封装、继承、多态
  7. Maven中的dependencyManagement 意义
  8. lcd和服务器同时显示温度,为什么LCD1602不能同时显示温度和时间?
  9. curl发送html邮件,使用curl命令行发送/发布xml文件
  10. java opentsdb 链接 池_如何使用tCollector通过Java在OpenTSDB中添加数据