千锋教育嵌入式物联网教程之系统编程篇学习-05

目录

无名管道

无名管道创建--pipe() 

 管道重点问题

 无名管道读写规律

fcntl设置文件阻塞特性

 文件描述符概述

文件描述符的复制-dup和dup2 

dup函数 

 dup2​

无名管道

进程间的通信,大部分都是使用内核空间进行操作,因为每一个进程的1G内核空间是相同的,而用户空间不同

 有点像消息队列,我们在裸机编程的时候,两个函数(理解为两个进程)进行通信的话,我们常使用全局变量,如果换成管道的话,代码量增加,反正这种思维可以使用在裸机开发中去,但是至于会不会对开发有好处或者坏处,就不得而知了,因为两个函数(进程)通信的方式很多,如单纯使用全局变量、使用消息队列(压栈出栈)、还有这个管道,其实后面两个的原理很像

 注意点:古老表示这种IPC很少使用,缺点多实用性不强。只能从一端读和写、数据是一次性的,一旦被读了就不存在了、只能在公共祖先的进程之间使用(因为它要求需要有血缘关系,可以理解为同一个进程的父子进程)

无名管道创建--pipe() 

 文件描述符就是优先最小未使用,只要我们拿到了文件描述符,那么就可以直接对文件进行写读操作---使用write和read

 

 管道重点问题

先写入hello,再写入world,后面写入的数据不会覆盖前面写入的数据

 读数据和写数据都会阻塞

场景:创建无名管道,然后fork(),子进程继承了无名管道的文件描述符,那么子进程就可以使用继承过来的文件描述符对管道进行操作了,注意继承的只是文件描述符其管道还是只有一个的,因此我们可以设定父进程收,子进程发。然后需要子进程对父进程进行收发的话,那么就需要创建两个管道了,但是这个新的管道跟之前的父进程没有关系,如何建立关系呢?那就是让新建的管道的文件描述符为之前的父进程的文件描述符 

 无名管道的创建在fork之前,如果在之后的话,父子进程创建的无名管道没有联系,那文件描述符相同吗?--可以实验一下

实现:父进程发,子进程收和发数据 

 无名管道读写规律

fcntl设置文件阻塞特性

通过前面讲的无名管道读写规律知,当管道没有消息时,read就会默认阻塞等待管道存在消息,那么阻塞等待对cpu是不太友好的,因此我们需要设定一下,如果没有消息,我不阻塞,那么就使用fcntl对文件进行配置一下

 

 

 

 文件描述符概述

printf是向终端打印,如果你关闭了文件描述符1的话,那么printf就不能打印了,失去了功能

 

文件描述符的复制-dup和dup2 

 

dup函数 

 

 

 

 

 dup2

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值