当前位置: 首页 > news >正文

【Linux-进程间通信】vscode使用通信引入匿名管道引入

一、新系统,新软件

1.新系统

哈喽宝子们,从今以后我们不再使用风靡一时的CentOS系统了,因为CentOS已经不在维护了,各大公司几乎也都从CentOS转入其他操作系统了;我们现在由原来的CentOS系统切换到最新的Ubuntu系统,各大公司不用,我们为什么还要学习一个不维护的系统呢?

我目前使用的是Ubuntu最新的系统了

注意:我们切换系统的时候是要重装系统的哦,所以我们需要把我们之前的东西传到代码托管平台上,切换新系统后在克隆下来就好了

那么有了新系统,我们当然也要搭配新软件了,之前的Vim是不是超级难用,快捷命令太多容易忘,而且上下左右走到代码指定位置特别烦!!所以我们换一个新的软件,他就是VSCode

2.新软件

VS Code安装很简单,咱们都是学计算机的,到官网下载一个软件都不会吗??

下载完成后,我需要介绍几个插件

1️⃣Chinese (Simplified) (简体中文)

你如果不下载这个,那么我会非常佩服你的英语水平

2️⃣C/C++ 和 C/C++ Extension Pack

这个重要性就应该不需要我多说了

3️⃣Remote - SSH

 这个就是用来链接云服务器的插件了

点连接

输入密码就添加成功了

基本的就介绍到这里了,相信大家的学习能力,我也知道写的并不详细,这里就是快入入门吧,开启我们的新篇章!!进程间的通信!!

二、通信引入

1.进程为什么要通信

首先计算机是人类发明的,人类都要通信,计算机怎么不需要呢?

进程也是需要某种协同的,所以如何协同的前提条件就是要通信,通信的本质也就是传递数据等,数据也是有类别的,有的数据是通知就绪的(就比如老师通知你上课),有的数据就是单纯要传递给我的(比如,老师这是我们写的作业,你来看看我们写的怎么样),还有控制相关的信息(比如下课了老师还在拖堂,校长就打电话给老师,你赶紧下课,不许占用学生们课下的时间)等等等

另外我们要拉出来一个事实:进程是具有独立性的,进程 = 内核数据结构 + 代码和数据

2.进程如何通信

1️⃣进程间通信,成本可能会稍微高一些(因为进程是具有独立性的)

2️⃣进程间通信的前提,先让不同的进程,看到同一份(操作系统)资源(“一段内存”)

通信一定是某一个进程发出来的,比如进程A需要与进程B通信,为了保证进程的独立性,A的代码和数据不能被B看到,B的代码和数据不能被A看到,那么A、B就需要在页表映射的时候,指向同一块内存,用于通信;

其中公共的区域是操作系统完成的,为了访问这块资源,操作系统必须提供很多的系统调用,这就会有许多的接口,接口的不同那么进程间的通信也会有不同的种类

3.进程通信的常见方式

无论是什么方式都要遵循通信的标准;我们这里介绍两个标准

1️⃣system V本地通信标准

通信的三种方式 a.消息队列 b.共享内存 c.信号量

我们这里只谈共享内存

人都是喜欢偷懒的,在这三种方式出来前,人就想着能不能直接复用内核代码直接通信?那么结果肯定是可以的,于是就发明了管道,管道有命名的和匿名

2️⃣Posix(网络通信

三、管道

什么是管道

  • 管道是Unix中最古老的进程间的通信形式

  • 我们把一个进程连接到另一个进程的一个数据流称为一个“管道”

匿名管道

匿名管道的引入

【理解一种现象】为什么父子进程会向同一个显示器终端打印数据?

进程默认会打开三个标准输入输出错误0,1,2;这是因为这个进程是bash的子进程,bash打开了,所有的子进程也就打开了,我们只要做好约定即可!!不懂?我们接着往下看⬇️

  • 【问题】如果我们以读的方式打开一个文件,写的方式打开同一个文件会发生什么?

首先同一个文件打开两次,struct file会被创建两次,但因为是同一个文件,并不会再单独创建文件的Inode等,而是直接指向同一块空间,操作系统不会去做浪费时间,浪费空间的事

  • 我们假设父进程以读的方式打开,子进程以写的方式打开,那么子进程以写的方式打开,会拷贝一份父进程的PCB和文件描述符表(浅拷贝),但是struct file等不会拷贝;我们之间不是说进程要保证独立性吗?为什么这里不拷贝,因为进程具有独立性是进程的事,与文件系统无关

  • 既然是浅拷贝那么指针的指向都是不变的,所以父进程打开的文件子进程也能看见了

【问题】为什么我们子进程主动close(0/1/2),不影响父进程继续使用显示器文件呢?

因为在文件系统内存在内存级引用计数,与硬连接数类似,只有当引用计数为0的时候,才会真正的释放文件资源(file -> ref_count --; if(ref_count == 0) 释放文件资源)

 不同的进程看到的同一份资源,比如这里的父子进程,看到同一份文件不重要,重要的是看见同一份文件缓冲区,这个基于文件的文件缓冲区我们就叫做管道文件

进程间的通信也就不需要再将内容刷新到磁盘上去了,于是就给管道重新设计通信接口,只需要让进程间进行内存级通信就可以了 

相关文章:

【Linux-进程间通信】vscode使用通信引入匿名管道引入

一、新系统,新软件 1.新系统 哈喽宝子们,从今以后我们不再使用风靡一时的CentOS系统了,因为CentOS已经不在维护了,各大公司几乎也都从CentOS转入其他操作系统了;我们现在由原来的CentOS系统切换到最新的Ubuntu系统&a…...

nerd bug:VPG多次计算vnetloss的计算图报错的解决

待更 Reference https://www.cnblogs.com/StarZhai/p/15495292.htmlhttps://github.com/huggingface/transformers/issues/12613https://discuss.pytorch.org/t/inplace-operation-errors-when-implementing-a2c-algorithm/145406/6...

BigDecimal类Date类JDK8日期

一、BigDecimal类是什么?它有什么用?先看一段代码,看这个代码有什么问题再说BigDeimal这个类是干什么用的,这样会好理解一些。 public class Test {public static void main(String[] args) {System.out.println(0.1 0.2);Syste…...

MybatisWebApp

如何构建一个有关Mybatis的Web&#xff1f; 在这里给出我自己的一些配置。我的TomCat版本&#xff1a;10.1.28 &#xff0c;IDEA版本&#xff1a;2024.1.4 Pom.XML文件 <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/200…...

第十五章 RabbitMQ延迟消息之延迟插件

目录 一、引言 二、延迟插件安装 2.1. 下载插件 2.2. 安装插件 2.3. 确认插件是否生效 三、核心代码 四、运行效果 五、总结 一、引言 上一章我们讲到通过死信队列组合消息过期时间来实现延迟消息&#xff0c;但相对而言这并不是比较好的方式。它的代码实现相对来说比…...

OpenAI 公布了其新 o1 模型家族的元提示(meta-prompt)

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

Java基础14-网络编程

十四、网络编程 java.net.*包下提供了网络编程的解决方案! 基本的通信架构 基本的通信架构有2种形式: CS架构( Client客户端/Server服务端)、BS架构(Browser浏 览器/Server服务端)。无论是CS架构&#xff0c;还是BS架构的软件都必须依赖网络编程!。 1、网络通信的三要素 网络通…...

sed命令详解

sed命令详解 sed&#xff08;stream editor&#xff0c;流编辑器&#xff09;是 Linux 和 Unix 系统中功能强大的文本处理工具&#xff0c;它能够对输入流&#xff08;如文件、管道输入等&#xff09;进行逐行处理&#xff0c;从而实现多种多样的文本编辑操作。 基本语法 se…...

Linux高阶——1013—正则表达式练习

1、正则表达式匹配机制 问号放在或者*后面&#xff0c;表示切换成非贪婪模式 [^>]表示非右尖括号的都能匹配&#xff0c;直到找到href"为止 [^"]表示向右匹配&#xff0c;到"为止 因此&#xff0c;三个都能匹配 2、 正则函数 寻找结果 源文件 正则函数运…...

【CMake】为可执行程序或静态库添加 Qt 资源文件,静态库不生效问题

【CMake】添加静态库中的 Qt 资源 文章目录 可执行程序1. 创建资源文件&#xff08;.qrc&#xff09;2. 修改 CMakeLists.txt3. 使用资源文件 静态库1. 修改 CMakeLists.txt2. 使用资源2.1 初始化资源文件2.2 可执行程序中调用 这里介绍的不是使用 Qt 创建工程时默认的 CMakeLi…...

服务器、jvm、数据库的CPU飙高怎么处理

服务器 CPU 飙高处理 排查步骤&#xff1a; 监控工具&#xff1a;使用操作系统自带的监控工具&#xff0c;比如 top、htop、sar、vmstat 等&#xff0c;查看哪些进程占用了大量的 CPU 资源。进程排查&#xff1a;通过 top 等工具找到消耗 CPU 最高的进程&#xff0c;确定是哪…...

自适应过滤法—初级

#课本P144例题 """ Python 简单的自适应过滤移动平均预测方法 """ import numpy as np import matplotlib.pyplot as plt#用于迭代的函数 def self_adaptive( seq, N, k, maxsteps ):## 初始化序列seq_ada = np.zeros( len(seq) ) # 设置预测…...

UML图有用吗?真正厉害的软件开发,有用的吗?什么角色用?

UML&#xff08;Unified Modeling Language&#xff0c;统一建模语言&#xff09;图在软件开发中是有用的&#xff0c;但其使用取决于项目的规模、复杂度以及开发团队的实践习惯。真正厉害的开发者并非一定要依赖UML图&#xff0c;但在某些情况下&#xff0c;UML图确实能够提升…...

基于Java+Springboot+Vue开发的酒店客房预订管理系统

项目简介 该项目是基于JavaSpringbootVue开发的酒店客房预订管理系统&#xff08;前后端分离&#xff09;&#xff0c;这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能&#xff0c;同时锻炼他们的项目设计与开发能力。通过学习基于Java…...

OpenCV高级图形用户界面(5)获取指定滑动条(trackbar)的当前位置函数getTrackbarPos()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 返回滑动条的位置。 该函数返回指定滑动条的当前位置。 cv::getTrackbarPos() 函数用于获取指定滑动条&#xff08;trackbar&#xff09;的当前…...

拓扑排序在实际开发中的应用

1. 拓扑排序说明 简单解释&#xff1a;针对于有向无环图&#xff08;DAG&#xff09;&#xff0c;给出一个可行的节点排序&#xff0c;使节点之间的依赖关系不冲突。 复杂解释&#xff1a;自行搜索相关资料。 本次应用中的解释&#xff1a;给出一个可行的计算顺序&#xff0…...

【CTF-SHOW】Web入门 Web27-身份证日期爆破 【关于bp intruder使用--详记录】

1.点进去 是一个登录系统&#xff0c;有录取名单和学籍信息 发现通过姓名和身份证号可以进行录取查询&#xff0c;推测录取查询可能得到学生对应学号和密码&#xff0c;但是身份证号中的出生日期部分未知&#xff0c;所以可以进行爆破 2.打开bp抓包 这里注意抓的是学院录取查…...

Windows 添加右键以管理员身份运行 PowerShell

在 Windows 系统中添加一个右键菜单选项&#xff0c;以便可以使用管理员权限打开 PowerShell&#xff0c;可以通过编辑注册表来实现。 打开注册表编辑器&#xff1a; 按 Win R 打开运行对话框。输入 regedit 并按回车&#xff0c;这将打开注册表编辑器。 导航到文件夹背景键&…...

数学建模算法与应用 第15章 预测方法

目录 15.1 微分方程模型 Matlab代码示例&#xff1a;求解简单的微分方程 15.2 灰色预测模型&#xff08;GM&#xff09; Matlab代码示例&#xff1a;灰色预测模型 15.3 自回归模型&#xff08;AR&#xff09; Matlab代码示例&#xff1a;AR模型的预测 15.4 指数平滑法 M…...

HC32F460KETA PETB JATA 工业 自动化 电机

HC32F460 系列是基于 ARM Cortex-M4 32-bit RISC CPU&#xff0c;最高工作频率 200MHz 的高性能 MCU。Cortex-M4 内核集成了浮点运算单元&#xff08;FPU&#xff09;和 DSP&#xff0c;实现单精度浮点算术运算&#xff0c;支持 所有 ARM 单精度数据处理指令和数据类型&#xf…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...

协议转换利器,profinet转ethercat网关的两大派系,各有千秋

随着工业以太网的发展&#xff0c;其高效、便捷、协议开放、易于冗余等诸多优点&#xff0c;被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口&#xff0c;具有实时性、开放性&#xff0c;使用TCP/IP和IT标准&#xff0c;符合基于工业以太网的…...

Python 高级应用10:在python 大型项目中 FastAPI 和 Django 的相互配合

无论是python&#xff0c;或者java 的大型项目中&#xff0c;都会涉及到 自身平台微服务之间的相互调用&#xff0c;以及和第三发平台的 接口对接&#xff0c;那在python 中是怎么实现的呢&#xff1f; 在 Python Web 开发中&#xff0c;FastAPI 和 Django 是两个重要但定位不…...

第22节 Node.js JXcore 打包

Node.js是一个开放源代码、跨平台的、用于服务器端和网络应用的运行环境。 JXcore是一个支持多线程的 Node.js 发行版本&#xff0c;基本不需要对你现有的代码做任何改动就可以直接线程安全地以多线程运行。 本文主要介绍JXcore的打包功能。 JXcore 安装 下载JXcore安装包&a…...