当前位置: 首页 > 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…...

linux系统,不定时kernel bug :soft lockup的问题

这个问题困扰好久&#xff0c;机器经常不定时卡死&#xff0c;只能重启 后来检查是因为没有安装nvidia显卡驱动&#xff0c;或者更新到最新驱动 下载地址&#xff1a;驱动详情 禁止nouveau就可以了...

【C语言教程】【常用类库】(十四)可移植库 - <unistd.h> 和 <sys/types.h>

14. 可移植库 - <unistd.h> 和 <sys/types.h> UNIX和类UNIX系统上提供的一组头文件&#xff0c;其中<unistd.h>定义了POSIX操作系统API的访问点&#xff0c;而<sys/types.h>定义了许多基础数据类型。这些库在多种环境中增强了C程序的可移植性。 14.1…...

Java项目实战II基于Spring Boot的周边游平台设计与实现(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着人们生…...

远程控制软件哪个好用:4款主流的远程控制软件大点评,谁最给力?

战国时期&#xff0c;有百家争鸣&#xff0c;九流十家&#xff0c;争芳斗艳&#xff1b; 时至今日&#xff0c;科学技术突飞猛进、一日千里&#xff0c;各大远程控制软件更是佳丽三千、琳琅满目、各有千秋&#xff01; 这时&#xff0c;新的问题来了&#xff1a;远程控制软件哪…...

基于springboot实习管理系统

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 系统展示 【2024最新】基于JavaSpringBootVueMySQL的&#xff0c;前后端分离。 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;…...

(38)MATLAB分析带噪信号的频谱

文章目录 前言一、MATLAB仿真代码二、仿真结果画图总结 前言 本文给出带噪信号的时域和频域分析&#xff0c;指出频域分析在处理带噪信号时的优势。 首先使用MATLAB生成一段信号&#xff0c;并在信号上叠加高斯白噪声得到带噪信号&#xff0c;然后对带噪信号对其进行FFT变换&…...

多级缓存-案例导入说明

为了演示多级缓存,我们先导入一个商品管理的案例,其中包含商品的CRUD功能。我们将来会给查询商品添加多级缓存。 1.安装MySQL 后期做数据同步需要用到MySQL的主从功能,所以需要大家在虚拟机中,利用Docker来运行一个MySQL容器。 1.1.准备目录 为了方便后期配置MySQL,我们…...

基于Python的自然语言处理系列(31):SpaCy + Training Neural Network

1. 介绍 在自然语言处理的多个任务中,训练神经网络模型是一个至关重要的步骤,它能帮助我们实现更精准的模型预测。对于特定的任务,如命名实体识别(NER)或文本分类,使用自定义的训练数据对模型进行微调是提高模型表现的有效方式。在这篇文章中,我们将深入探讨如何从零开始…...

在 cPanel 中管理区域编辑权限

在 cPanel & WHM 60 版本中&#xff0c;cPanel 界面有四种不同方式编辑你的区域文件。简单 DNS 编辑器&#xff08;cPanel >> 域名 >> 简单 DNS 编辑器&#xff09;允许用户设置 A 记录和 CNAME 记录。高级 DNS 编辑器&#xff08;cPanel >> 域名 >&g…...

web前端网页用户注册页面

源码&#xff1a; <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>用户注册</title> </head> <body><form action"#" metho…...