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

2023-05-16

目录

无名管道

无名管道创建--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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • Kubernetes(k8s)之在集群环境部署Prometheus(普罗米修斯监控)和集群的ui管理工具Grafana

    Prometheus Prometheus演示环境部署Prometheus和Grafana测试 Prometheus Prometheus是一个开源系统监控和警报工具包 现在是一个独立的开源项目 xff0c 独立于任何公司进行维护 Prom
  • 用OpenStack搭建简单的云平台并启动云主机

    OpenStack OpenStack简介OpenStack重要集成组件OpenStack平台部署部署环境建立虚拟机 配置时间同步安装OpenStack安装 RabbitMQ 消息队列服务Memcached缓存令牌的安装安装和配置OpenS
  • python实现快速排序、归并排序

    时间复杂度平均为nlogn 快速排序快速排序代码 xff1a 归并排序归并排序代码 xff1a 快速排序 快速排序算法有两个核心点 xff0c 分别为 哨兵划分 和 递归 哨兵划分操作 xff1a 以数组某个元素 xff08 一般选取首元素
  • pycharm常用快捷键

    常用快捷键 复制粘贴撤销就不用我说了吧复制选中行并在该行下粘贴批量注释多行缩进多行删除缩进全局关键字搜索该页关键字搜索查看内置函数源码该函数被哪里引用按文件名搜索py文件按文件名搜索所有类型的文件 复制粘贴撤销就不用我说了吧 复制 xff1
  • linux源码安装python3

    python3源码安装 前置环境解压提前解决依赖性源码编译三部曲验证安装 前置环境 先要准备好源码包 xff0c 去官网下载自己想要的版本https www python org ftp python 我下的是3 9 7的直接下到了要安装p
  • 【shell】用 grep 查找包含字符串的文件|grep 过滤|取匹配行的前后n行

    目录 即可即用 grep 匹配多个关键字 与find的不同 grep检索文件内容详解 grep指定搜索的文件类型 grep 不起作用 xff1f 过滤了还是显示 匹配特定的列 指定在哪些文件 哪类文件 哪个目录里搜索 搜索时包含 排除哪类文
  • 基于FreeRTOS+STM32实践-01

    目的 xff1a 复习FreeRTOS以及STM32的使用 xff0c 完成51单片机到stm32的过渡 该项目会与传感器以及其他种类的外设相联系 xff0c 以提升代码管理能力和逻辑能力 在51单片机中我们使用了很多传感器和外设 xff0
  • C++点亮stm32LED灯

    目的 xff1a 引导初学者使用C 43 43 对STM32进行编程 1 xff1a 在C语言中我们没有封装 继承 多态的概念 xff0c 没有面向对象的程序思想 这些思想一般是源于C 43 43 语言的 xff0c C语言是面向过程的语言
  • 基于FreeRTOS+STM32实践-02

    按键学习 按键常见的为独立按键和行列按键 stm32中不存在Bit类型数据 而在51内核中存在bit类型的 按键引脚分配 开发板自带3个独立按键 xff1a KEY0 PC5 KEY1 PA15 WK UP PA0 行列键盘引脚分配 xff
  • 基于FreeRTOS+STM32实践-03

    03 xff1a 按键的扫描 资源 xff1a 软件定时器 43 信号量 43 消息队列 在51单片机中的按键扫描是 xff1a 标志位在10ms定时器1的中断中置一 xff0c 在while 1 中写一个如下的按键扫描程序 xff0c 目
  • 【正点原子】手把手教你学FreeRTOS-01

    内容为 xff1a 正点原子FreeRTOS的视频前1 8 目的 xff1a 简单的回忆一下 xff0c 加深印象和理解 单片机的发展趋势 操作系统的核心就是 任务调度器 xff0c 关于这些特点 xff0c 也是我们学习FreeRTOS的
  • 【正点原子】手把手教你学FreeRTOS-02

    内容为 xff1a 正点原子FreeRTOS的视频第9 10节 一个任务所需要的资源这些东西在标准库需要我们自己写 xff0c 但是在MX软件中可以自己生成 四项基本 xff1a 优先级 堆栈大小 句柄 任务函数声明 一个XXX任务需要的资
  • 【正点原子】手把手教你学FreeRTOS-03

    基本内容 xff1a 任务的创建 控制块 删除 挂起 恢复的使用 创建任务函数的核心 栈的增长方向为向下的则portSTACK GROWTH gt 0 而我们stm32使用的就是向下因此执行这个 xff0c 下面的就是向上不执行 核心函数p
  • 【正点原子】手把手教你学FreeRTOS-04

    FreeRTOS的中断配置是一个很重要的内容 xff0c 需要根据所使用的MCU来具体配置 重点 xff1a 不同的MCU所在FreeRTOS的配置是不一样的 xff0c 当你使用了其他芯片 xff0c 配置就有所不同了 xff0c 不要固
  • 千锋教育+计算机四级网络-计算机网络学习-01

    目录 课程链接 最早的广域网 计算机网络发展阶段 计算机网络的定义与要点 英文单词网络术语与解释 计算机网络分类 广域网技术 城域网 局域网 个人局域网 五种基本的网络拓扑结构 误码率 电路交换网特点 分组交换 交换方式 TCP IP协议族
  • Keil + STM32学习嵌入式数据结构-01

    视频链接 初识数据结构 xff0c 十天搞定嵌入式数据结构 哔哩哔哩 bilibili 课程目的 学会嵌入式经常使用的数据结构 具备基础知识 具有C语言基础 xff08 结构体 指针 内存 xff08 malloc xff09 具有数据结构
  • 【网络】nmcli 网络管理工具|ip命令|ethtool 命令|centOS 8 重启网络服务 / 重启网卡

    目录 nmcli 命令 前提 重启网络服务 重启网卡 实例 nmcli输出说明 3种网络配置方法 nmcli的命令参数 Tips ethtool 命令 IP命令 添加网卡到配置文件 Linux系统怎么查看网卡的UUID nmcli 命令 原
  • 正点原子【第四期】手把手教你学 Linux之驱动开发篇-01

    学习目的 了解驱动开发和应用开发的过程 xff0c 具有一定的基础就行 第一讲 xff1a linux驱动开发与裸机开发区别 刚开始听不懂很正常 xff0c 等之后学了一点你就会知道它说啥了 第二讲 xff1a 字符设备驱动开发基础 字符设
  • 普中科技手把手教你学ESP32--基于MicroPython-02

    第四讲 xff1a LED灯实验 MicroPython函数使用 本来需要加入machine 的 xff0c 但是我引入了form machine import Pin就可以直接省略了 machine是一个模块 xff0c Pin是mach
  • 千锋教育嵌入式物联网教程之系统编程篇学习-05

    目录 无名管道 无名管道创建 pipe 管道重点问题 无名管道读写规律 fcntl设置文件阻塞特性 文件描述符概述 文件描述符的复制 dup和dup2 dup函数 dup2 无名管道 进程间的通信 xff0c 大部分都是使用内核空间进行操作