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

【Linux课程学习】第十九弹---深入理解进程间通信---匿名管道,命名管道,多匿名管道的BUG

🎁个人主页:我们的五年

🔍系列专栏:Linux课程学习 

🌷追光的人,终会万丈光芒

🎉欢迎大家点赞👍评论📝收藏⭐文章

Linux学习笔记:

 https://blog.csdn.net/djdjiejsn/category_12669243.html

前言:

从本篇开始,就要来谈谈进程间通信。方式有很多,设计的模式也不一样。根据后面网络的编程的需求,某些进程间通信可能用的更广。文章会从进程间通信的介绍,匿名管道,命名管道,system V 共享内存讲解,system V可能会放在下面文章讲解。

目录

一.进程间通信介绍

1.1进程间通信的目的:

1.2进程间通信的发展:

1.3进程间通信的分类:

二.匿名管道

2.1管道的介绍:

2.2匿名管道创建:

2.2.1函数介绍:

2.2.2函数解读:

2.3匿名管道实现通信实现:

2.3.1关闭相应的端口:

2.3.2写端关闭,读端如何反应?

2.3.3读端关闭,写端如何反应? 

2.3.4其他情况:

三.命名管道

3.1命名管道的介绍:

它和匿名管道的区别主要体现在:

3.2如何创建管道?

3.2.1在命令行中创建一个命名管道:

3.2.2通过函数创建:

 四.关于Makefile文件的编写:


一.进程间通信介绍

我们知道,进程是具有独立性的,那么我们想要让一个进程从另外一个进程得到信息,我们要怎么做呢?这就有了进程间通信。

进程间通信的本质是让不同的进程看到同一份资源

这块内存的特点:由操作系统(OS)创建,是内存级空间(没必要到达磁盘这一级去)。

1.1进程间通信的目的:

🥬1.数据传输一个进程需要把它的数据发生给另外一个进程。

🥬2.资源共享:多个进程直接共享同样的资源

🥬3.通知事件:一个进程向另一个进程或者一组进程发生消息,通知它们发生某种事件。

🥬4.进程控制:有些进程希望完全控制另一个进程的执行,此时控制进程希望能够拦截另一个进程的所有陷入和异常,并且能及时知道它的状态信息。

上面所有的目的都是因为进程间通信,可以让不同进程间传递数据

1.2进程间通信的发展:

管道
System V进程间通信
POXIS进程间通信

1.3进程间通信的分类:

下面是本地通信的分类,除了本地通信,还有网络通信

管道:匿名管道(pipe),命名管道(FIFO)。

System V:System 消息队列,System V共享内存,System V 信号量。

POSXI IPC:消息队列,共享内存,信号量,互斥量,条件变量,读写锁。


二.匿名管道

2.1管道的介绍:

管道式一种古老的通信方式,它设计不要专门去设计一套通信,而是用文件进行修改就能通信的方式。

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

管道的特性是面向字节流的。单向的

在创建多管道的时候,会有BUG。父子进程能进程同样的文件描述符,但在创建躲管道的时候,这也是他缺点。

匿名管道也是只能用于有亲缘关系之间的进程进行通信。因为他们要进行继承父进程的文件描述符,才能让他们看到同样的空间。

在Ubuntu系统中,管道的大小一般是64KB。

2.2匿名管道创建:

2.2.1函数介绍:

头文件:
#include <unistd.h>

函数原型:

int pipe(int pipefd[2]);

2.2.2函数解读:

🎒功能:创建一无名管道。

🎒参数:传入的fd表示的int数组类型的指针。如果成功,fd[0]中表示读端的文件描述符,fd[1]表示的写端的文件表述符。

🎒返回值:成功返回0,错误返回错误代码。

2.3匿名管道实现通信实现:

下面的代码实现的是,打开一个匿名管道。然后返回的是文件描述符。通过创建子进程,子进程继承父进程的文件描述符。这样就让父子进程看到同一个文件。因为要保证单向性,最好就是把没有用的端关闭。这样尽量保证安全性。

2.3.1关闭相应的端口:

比如父进程只进行读取数据,那么他就把写入端关闭。子进程进行写入,那么子进程就把读端关闭。

2.3.2写端关闭,读端如何反应?

另外如果管道没有东西,读端就阻塞住,等待写端写入数据。如果写端关闭,那么读端把管道里的数据读完以后,就会读到空。返回的就是0。这样就可以判断可以关闭读端了。

2.3.3读端关闭,写端如何反应? 

读端关闭,写端进程会发生错误,管道里的数据也会被处理。匿名管道读端关闭后,写端进程继续写入数据会面临错误返回或者收到终止信号等情况,并且管道内剩余未读的数据也会被相应处理掉。

OS通过信号杀死进程。通过kill -13杀死进程。IPC!!!

2.3.4其他情况:

管道为空&&管道正常,那么read阻塞

管道为满&&管道正常,那么write阻塞

写入的数据量不大于PIPE-BUF时,Linux保证写入的原子性

写入的数据大于PIPE-BUF时,Linux保证写入的原子性

#include <iostream>
#include <unistd.h>// child send message to father
int main()
{int fd[2];int n = pipe(fd);// 匿名管道创建失败,成功返回0,失败返回非0if (n != 0){std::cerr << "pipe error!\n"<< std::endl;return 1;}// 创建子进程,并且父子进程关闭对应的文件fd。int id = fork();if (id < 0){std::cerr << "fork error!\n"<< std::endl;}// child  关闭读端if (id == 0){::close(fd[0]);int num = 0;while (1){std::string s;std::cin >> s;num += ::write(fd[1], s.c_str(), s.size()-1);std::cout << "num:" << num << std::endl;}}// father  关闭写端else{::close(fd[1]);while (1){char buf[1024];int end = ::read(fd[0], buf, sizeof(buf));if (end > 0){buf[end] = '\0';}else if (end == 0){close(fd[0]);break;}printf("father:%s\n\n", buf);}}return 0;
}

 2.4多个匿名管道产生的BUG

在我们pipe创建多个管道的时候,在第一次把一个管道创建好以后,我们会进行把某个进程的读端打开,某个进程的写端关闭。然后再去创建下一个匿名管道。

这个时候我们fork出来的子进程,还会继承父进程的一系列的文件描述符,其中就包括了指向上一个匿名管道的读端或者写端。所以我们要进行一一的关闭。

创建一个管道,对应要关一次,创建两个匿名管道,就要关两次了,以此类推。


三.命名管道

3.1命名管道的介绍:

命名管道不再受血液的限制,可以让任意两个进程进行通信。命名管道是一种特殊的管道。命名管道会有一个真实的文件在指定文件夹中。

命名管道其实就是一个文件,只是这个文件被OS经过特殊的处理,只占用内核的空间,不会去进行磁盘级的操作。

它和匿名管道的区别主要体现在:

1.匿名有pipe函数创建并且打开。

2.命名管道由mkfifo创建,由open打开。

除了这些打开方式的区别以外,匿名管道和命令管道的用法基本相同

3.2如何创建管道?

3.2.1在命令行中创建一个命名管道:

在命令行中输入下面的命令:

mkfifo share

 mkfifo表示创建一个命名管道,后面的是命名管道的名称。

3.2.2通过函数创建:

头文件:

#include <sys/types.h>

 #include <sys/stat.h>

函数原型:
int mkfifo(const char *pathname, mode_t mode);

函数解读:

pathname表示的是创建命名管道的路径,可以是./fifofile这样的路径,然后就会在当前路径创建命名管道。命名管道其实就是一个文件,只是这个文件被OS经过特殊的处理,只占用内核的空间,不会去进行磁盘级的操作。

但命令管道被创建,先打开的是写,而读端还没启动,那么就会阻塞住。不然直接就是写端有,读端没有,就会被OS杀死。所以在这一点,还是进行了特殊处理的。


 四.关于Makefile文件的编写:

BIN表示的是目标程序,SRC是源文件,OBJ是经过预处理,编译和汇编以后的文件。

CC表示所用的编译器,FLAGSLDFLAGS是选项。

test是查看所有的.o和.cc。

BIN=pipe
SRC=$(wildcard *.cc)
OBJ=$(SRC:.cc=.o)CC=g++
FLAGS=-c -Wall -std=c++11 
LDFLAGS=-o$(BIN):$(OBJ)$(CC) $(LDFLAGS) $@ $^%.o:%.cc$(CC) $(FLAGS) $<.PHONY:clean
clean: rm -rf $(BIN) $(OBJ).PHONY:test
test:@echo $(SRC)@echo $(OBJ)

文章已经接近尾声,后续会进行更新System V共享内存,可以关注一下新的博客。如果看懂文章欢迎到下面进行投票。你的支持是我前进的最大动力。

🌷🌷🌷🌷🌷🌷🌷🌷🌷🌷🌷🌷🌷🌷🌷🌷🌷🌷🌷🌷🌷🌷🌷🌷

相关文章:

【Linux课程学习】第十九弹---深入理解进程间通信---匿名管道,命名管道,多匿名管道的BUG

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;Linux课程学习 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 ​ Linux学习笔记&#xff1a; https://blog.csdn.n…...

【C语言】库函数常见的陷阱与缺陷(1):字符串处理函数

目录 一、 strcpy 函数 1.1. 功能与常见用法 1.2. 陷阱与缺陷 1.3. 安全替代 1.4. 代码示例 二、strcat 函数 2.1. 功能与常见用法 2.2. 陷阱与缺陷 2.3. 安全替代 2.4. 代码示例 三、strcmp 函数 3.1. 功能与常见用法 3.2. 陷阱与缺陷 3.3. 安全替代 3.4. 代…...

Qt中的 tableView 设置 二进制 十六进制 序号表头

二 进制序号 因为QTableView的垂直表头并不支持使用委托来自定义。 相反&#xff0c;可以通过将自定义的QWidget作为QHeaderView的标签来实现这一目标。 代码&#xff1a; #include <QApplication> #include <QMainWindow> #include <QVBoxLayout> #include …...

leetCode121.买卖股票的最佳时机

题目&#xff1a; 给定一个数组prices,它的第i个元素prices[i]表示一支给定股票第i天的价格。 你只能选择某一天买入这只股票&#xff0c;并选择在未来的某一个不同的日子卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取的最大利润。如果你…...

基于单片机的自限位电机正反转控制电路

【摘要】 针对减速直流电机正反转和停转控制问题,设计了正反转及自限位控制电路,编制了基于STM8S103单片机的控制电机正反转及自限位的子程序,并应用IAR软件进行仿真,搭建实验装置验证设计效果,实验结果表明所设计控制电路能够良好地控制电机正转、反转和停转,在生活实际…...

为什么使用 Token 而不是 Cookie 来管理用户认证和会话

使用 Token 而不是 Cookie 来管理用户认证和会话的原因主要有以下几点&#xff1a; 跨域问题 (Cross-Domain) Token&#xff1a;通常是存储在客户端的 localStorage 或 sessionStorage 中&#xff0c;不会自动随请求发送到服务器&#xff0c;这使得它在处理跨域请求时更加灵活…...

WIDER FACE数据集转YOLO格式

1. 引出问题 本人最近在做毕设相关内容&#xff0c;第一阶段目标是通过目标检测来统计课堂人数&#xff0c;因此需要对人脸和人头进行目标检测。模型方面没什么好说的无脑用YOLO&#xff0c;数据集方面&#xff0c;人脸部分找到了来自港中文的WIDER FACE数据集。但是解压后发现…...

机器学习概述详解

文章目录 机器学习概述详解一、引言二、机器学习基础1、机器学习定义及应用场景2、监督学习与无监督学习 三、机器学习开发流程四、使用示例1、LeNet网络结构代码示例2、AlexNet网络结构代码示例 五、总结 机器学习概述详解 一、引言 机器学习作为人工智能的一个重要分支&…...

VTK编程指南<三>:基于VTK入门程序解析来理解VTK基础知识

1、VTK入门程序 下面是一个完整的Vtk入门程序&#xff0c;我们基于这个程序来对VTK的基本知识进行一个初步了解。 #include <iostream>#include <vtkAutoInit.h> VTK_MODULE_INIT(vtkRenderingOpenGL2);// VTK was built with vtkRenderingOpenGL2 VTK_MODULE_INI…...

【UE5 C++课程系列笔记】07——使用定时器实现倒计时效果

使用定时器实现如下倒计时效果 效果 步骤 1. 新建一个Actor类&#xff0c;这里命名为“CountDownTimerActor” 2. 在头文件中先定义倒计时时间和更新剩余时间的函数方法 前向声明一个文本渲染组件 3. 在源文件中引入文本渲染组件 创建文本渲染组件并进行一些设置 实现Update…...

基于DDPM的PyTorch简单实现

基于DDPM的PyTorch简单实现 文章目录 基于DDPM的PyTorch简单实现摘要Abstract一、DDPM实现1. 获取数据集2. DDPM类3. 训练算法4. 去噪神经网络5. 实验结果与采样 总结 摘要 本周的学习与实践围绕扩散模型&#xff08;Diffusion Model&#xff09;的基础理论和实现展开&#xf…...

php laravel 学习管理系统(LMS)

Lernen LMS&#xff08;学习管理系统&#xff09;是一个综合性的在线教育平台&#xff0c;旨在为学生和导师提供灵活、高效、便捷的学习体验。该系统不仅帮助学生找到最适合自己的导师&#xff0c;还通过一系列强大的功能&#xff0c;提升了课程安排、学习管理和师生互动的效率…...

【JAVA】Java高级:数据库监控与调优:SQL调优与执行计划的分析

作为Java开发工程师&#xff0c;理解SQL调优和执行计划的分析是至关重要的。这不仅可以帮助我们提高数据库查询的效率&#xff0c;还能减少系统资源的消耗&#xff0c;提升整体应用的性能。 1. SQL调优的重要性 随着数据量的增加和用户请求的增多&#xff0c;数据库的性能问题…...

centos9升级OpenSSH

需求 Centos9系统升级OpenSSH和OpenSSL OpenSSH升级为openssh-9.8p1 OpenSSL默认为OpenSSL-3.2.2&#xff08;根据需求进行升级&#xff09; 将源码包编译为rpm包 查看OpenSSH和OpenSSL版本 ssh -V下载源码包并上传到服务器 openssh最新版本下载地址 wget https://cdn.openb…...

jeccg-boot修改密码

最近在使用jeccg-boot框架&#xff0c;遇到一个需要批量修改用户密码的问题 由于框架使用的是加密盐算法生成的密码 &#xff0c;无法直接通过数据库修改密码 例如将password字段和salt值复制过去&#xff0c;密码是不对的 查看代码发现通过user.getUsername(), user.getPasswo…...

linux 生成 nginx 的https ssl 证书详解

证书生成 1. 生成证书 会提示输入密码&#xff0c;输入两次相同密码即可。 openssl genrsa -des3 -out server.key 20482. 去除密码校验 如果想去除此输密码的步骤&#xff0c;可以执行如下命令&#xff0c;根据使用需求选择。 openssl rsa -in server.key -out server.ke…...

详细介绍vue的递归组件(重要)

递归组件在 Vue 中是一个非常强大的概念&#xff0c;尤其在渲染层级结构&#xff08;如树形结构、嵌套列表、评论系统等&#xff09;时&#xff0c;能够极大地简化代码。 什么是递归组件&#xff1f; 递归组件就是一个组件在其模板中引用自身。这种做法通常用于渲染树形结构或…...

gitlab配置调试minio

官方文档 rails console 调试 查看配置Settings.uploads.object_store加载minio clientrequire fog/awsfog_connection Fog::Storage.new(provider: AWS,aws_access_key_id: 你的MINIO_ACCESS_KEY,aws_secret_access_key: 你的MINIO_SECRET_KEY,region: <S3 region>,e…...

Docker(Nginx) 部署 uniapp

目录 一、准备工作 1.Docker安装nginx 2.安装HBuild X工具 二、HBuild X打包项目 1.在HBuild X导入项目 2.配置manifest.json 3.打包 &#xff08;1&#xff09;点击发行 &#xff08;2&#xff09;填写信息&#xff0c;点击发行 三、nginx部署uniapp 1.生成文件上传…...

Camp4-L2:LMDeploy 量化部署进阶实践

书生浦语大模型实战营第四期&#xff1a;LMDeploy 量化部署进阶实践 教程链接&#xff1a;https://github.com/InternLM/Tutorial/tree/camp4/docs/L2/LMDeploy视频链接&#xff1a;https://www.bilibili.com/video/BV18aUHY3EEG/?vd_sourceb96c7e6e6d1a48e73edafa36a36f1697…...

第二十四周学习周报

目录 摘要Abstract1. 文献阅读1.1 RNN1.2 Deep Recurrent Neural Networks1.3 实验1.4 讨论 2. AI虚拟主播生成总结 摘要 本周的主要任务是阅读了一篇关于循环神经网络的论文&#xff0c;该论文旨在探索将RNN扩展到深度RNN的不同方法。论文通过对RNN结构的理解和分析&#xff…...

深入解析 Android PMS —— APK 安装与解析全流程

文章目录 前言1. PMS 的初始化1.1 SystemServer 启动 PMS1.2 PMS 的入口方法 main1.3 PMS 构造函数1.4 扫描 APK 文件1.5 权限初始化1.6 提供对外服务 2. APK 安装机制2.1. 安装请求的触发2.2 APK 文件解析与验证2.3 签名校验2.4 权限管理2.4.1 权限声明2.4.2 权限校验与分配 2…...

RL仿真库pybullet

1. 介绍 PyBullet是一个基于Bullet Physics引擎的物理仿真Python接口&#xff0c;主要用于机器人仿真模拟。 1.1 主要特点 提供大量预设的机器人模型&#xff0c;例如URDF(统一机器人描述格式)、SDF、MJCF 格式。适用于训练和评估强化学习算法&#xff0c;提供了大量的强化学…...

Vue3组件通信(父传子,子传父,跨组件通信)

本文主要是讲述Vue3在setup语法糖下的组件间通信 Vue组件通信是指在Vue.js中&#xff0c;不同组件之间进行信息交流和共享数据的过程。在前端开发中&#xff0c;组件通信是非常重要的一部分&#xff0c;因为在一个复杂的应用中&#xff0c;不同的组件通常需要相互协作&#xff…...

从失败中学习:如何将错误转化为学习机会

失败是人生的一部分&#xff0c;无论是在个人生活还是职业生涯中&#xff0c;我们都难免会遇到挫折和错误。然而&#xff0c;失败并不意味着终结&#xff0c;而是一个潜在的学习机会。通过正确的态度和方法&#xff0c;我们可以从失败中汲取经验&#xff0c;转化为成长的动力。…...

[0629].第29节:配置中心业务规则与动态刷新

我的后端学习大纲 SpringCloud学习大纲 1、编码实现3377服务&#xff1a; 1.1.建module: 1.2.改pom: 1.3.写YML&#xff1a; 1.Nacos同Consul一样&#xff0c;在项目初始化时&#xff0c;要保证先从配置中心进行配置拉取&#xff0c;拉取配置之后&#xff0c;才能保证项目的正…...

JUC并发编程

进程&#xff1a;系统中正在运行的一个应用程序&#xff0c;程序一旦运行就是进程&#xff0c;是资源分配的最小单元。 线程&#xff1a;系统分配处理器时间资源的基本单元&#xff0c;进程之内独立执行的一个单元执行流&#xff0c;是程序执行的最小单位。 Lock 需要手动上…...

贪心算法解题方法介绍+实操案例——会场安排与月饼售卖问题解析

从贪心算法到实操案例——会场安排与月饼售卖问题解析 前言 贪心算法是一种通过选择局部最优解来尝试构建全局最优解的算法。它简单高效&#xff0c;适用于许多优化问题。本文将详细介绍贪心算法的一般解题步骤&#xff0c;并通过两个实例——月饼售卖问题和会场安排问题——…...

ASP.NET Core API 前后端分离跨域

环境准备 数据库&#xff1a; sqlserver 2022 后端&#xff1a; vs2022 ASP.NET Core API .net 8 前端&#xff1a; Hbuilderx bootstrap 5.3.0 jquery v3.7.1 bootstrap-table 1.23.5 完整项目代码下载地址 功能 实现 单张表 的 增 删 改 查 创建数据库和表 create data…...

用Python绘制医学热图

在医学研究和临床实践中&#xff0c;数据的可视化是不可或缺的一部分。通过直观的数据展示&#xff0c;医学专业人员可以更好地理解各种疾病的治愈率、治疗效果以及医院之间的差异。今天&#xff0c;我们将介绍一种强大的数据可视化工具——热图&#xff08;Heatmap&#xff09…...

使用 Spring Boot 和 GraalVM 的原生镜像

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;历代文学&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编程&#xff0c;高并发设计&#xf…...

Flutter解压文件并解析数据

Flutter解压文件并解析数据 前言 在 Flutter 开发中&#xff0c;我们经常需要处理文件的读取和解压。 这在处理应用数据更新、安装包、存档文件等场景中尤为常见。 本文将介绍如何在Flutter中使用archive插件来解压文件并解析数据。 准备 在开始之前&#xff0c;我们需要…...

深入理解 JavaScript 引擎与消息队列的底层原理

深入理解 JavaScript 引擎与消息队列的底层原理 JavaScript 是现代 Web 开发中最为重要的编程语言之一&#xff0c;它的运行和执行方式常常是开发者关注的重点。为了更好地理解 JavaScript 的执行过程&#xff0c;我们需要深入探索 JavaScript 引擎的工作原理&#xff0c;尤其…...

使用 ANSYS Forming 和 LS-DYNA 进行金属成形仿真简介

了解金属成型 金属成型是制造业中的关键过程&#xff0c;其中原材料通过变形转化为所需的形状。这可能包括冲压、弯曲和深拉等操作。这些工艺的质量和效率在很大程度上取决于对各种参数的精确控制&#xff0c;例如材料特性、工具几何形状和加工条件。为了优化这些参数并确保成功…...

001-mysql安装

[rootcentos701 ~]# hostname -I 10.0.0.200 172.17.0.1 [rootcentos701 ~]# hostname centos701 [rootcentos701 ~]# rpm -qa | grep mariadb [rootcentos701 ~]# rpm -e --nodeps mariadb-libs-5.5.65-1.el7.x86_64 [rootcentos701 ~]# useradd mysql -s /sbin/nologin #创建…...

以攻击者的视角进行软件安全防护

1. 前言 孙子曰&#xff1a;知彼知己者&#xff0c;百战不殆&#xff1b;不知彼而知己&#xff0c;一胜一负&#xff0c;不知彼&#xff0c;不知己&#xff0c;每战必殆。 摘自《 孙子兵法谋攻篇 》在2500 年前的那个波澜壮阔的春秋战国时代&#xff0c;孙子兵法的这段话&…...

Go 语言性能优化全解析

在当今的软件开发环境中&#xff0c;Go 语言&#xff08;Golang&#xff09;因其简洁的语法、高效的并发模型和快速的编译速度而备受青睐。然而&#xff0c;随着应用程序复杂性的增加&#xff0c;即使是在 Go 中也可能会遇到性能瓶颈。为了帮助开发者构建高性能的应用程序&…...

《智能体雏形开发(高阶实操)》二、智能体雏形开发

基于阿里云百炼平台开发智能体应用:生成日报与周报 在智能体开发中,生成结构化的日报与周报是一个典型的任务。本篇文章将基于阿里云百炼平台,结合 Python 开发环境,介绍如何开发一个从日志文件提取信息并生成摘要的智能体。我们将从需求分析、任务设计到核心功能实现逐步…...

【k8s】kubelet 和 API Server的关系

文章目录 概述1. # kubelet 和 API Server 之间的关系**1. 角色和功能****1.1 kubelet****1.2 API Server** **2. 交互关系****2.1 kubelet 从 API Server 获取指令****2.2 kubelet 向 API Server 上报状态****2.3 kubelet 与 API Server 的认证和授权** **3. 典型交互场景****…...

POSTGRESQL跟ORACLE语法区别和相同之处

跟ORACLE语法区别之处 1. Update和delete语法区别 Pg 和MySQL Update和delete的时候表名不能加别名 2. 插入数字类型不一样 ORACLE 对number类型的数据可以用’’ 字符串标记插入&#xff0c;但是PG不行&#xff0c;必须要进行正确的数据类型 3. SEQ使用不同 ORACEL的SEQ…...

Distance in Tree 树形dp练习(树中两点距离为k的数量板子)

Distance in Tree 题面翻译 题目大意 输入点数为 N N N一棵树 求树上长度恰好为 K K K的路径个数 输入格式 第一行两个数字 N , K N,K N,K,如题意 接下来的 N − 1 N-1 N−1行中,每行两个整数 u , v u,v u,v表示一条树边 ( u , v ) (u,v) (u,v) 输出格式 一个整数 a n…...

【MySQL】库的操作+表的操作

库的操作表的操作 1.库的操作 1.1创建数据库1.2删除数据库1.3查找数据库1.4修改数据库1.5数据库备份和恢复1.6查看连接情况 2.库的操作 2.1创建表2.2查看表结构2.3修改表2.4删除表 点赞???收藏???关注??? 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧???…...

vue异步更新,$nextTick

如果将isShowEdit改为true,就会显示输入框和确认按钮、 如果isShowEdit为false的话就显示“大标题”和编辑 想要获取元素焦点&#xff0c;但是vue是异步更新&#xff0c;会出错显示this.$refs.inp是undefined&#xff0c;是因为input元素并没有更新完成&#xff0c;所以需要使用…...

【3D AIGC】Img-to-3D、Text-to-3D、稀疏重建(2024年文章汇总)

文章目录 1. Wonderworld&#xff1a;拓展图片边界&#xff0c;生成3D场景2. 3DTopia-XL&#xff1a;扩散模型辅助生成3. 3DGS-Enhancer: 通过视图一致2D Diffusion&#xff0c;提升无界3D Gaussian Splatting (NlPs2024 Spotlight)4. L3DG&#xff1a;Latent 3D Gaussian Diff…...

简单的springboot使用sse功能

什么是sse? 1、SSE 是Server-Sent Events&#xff08;服务器发送事件&#xff09; 2、SSE是一种允许服务器主动向客户端推送实时更新的技术。 3、它基于HTTP协议&#xff0c;并使用了其长连接特性&#xff0c;在客户端与服务器之间建立一条持久化的连接。 通过这条连接&am…...

Nginx 防止IP伪造,绕过IP限制

背景介绍 在使用Nginx时&#xff0c;需要将IP地址转发到后置应用中&#xff0c;往往需要增加配置 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 在后端程序通过读取请求头里的X-Forwarded-For来获取用户客户端IP。 public String getRemortIP(HttpServle…...

原生js仿el-table动态表头

解决动态表头数据量过大导致页面卡顿的问题解决固定前几列导致表头设置宽度失效或者错位的问题功能&#xff1a; 固定前几列合并指定单元格 <div class"tableJoint2"><div><table id"tableData"></table></div><div>…...

【opencv入门教程】9.视频加载

文章选自&#xff1a; 一、VideoCapture类 用于从视频文件、图像序列或摄像头捕获视频的类。函数&#xff1a;CV_WRAP VideoCapture();brief 默认构造函数CV_WRAP explicit VideoCapture(const String& filename, int apiPreference CAP_ANY);brief 使用 API 首选项打开…...

数据结构 ——无头单链表

数据结构 ——无头单链表 一、无头单链表的定义与特性 1、单链表简介 单链表是一种常见的基础数据结构&#xff0c;它由一系列节点组成&#xff0c;每个节点包含数据部分和指向下一个节点的指针。无头单链表是单链表的一种变体&#xff0c;其特点是没有明确的头节点&#xff0…...

【UE5】制作插件 并调试【vs2022】

视频教程&#xff1a;好看视频-轻松有收获 https://www.youtube.com/watch?vIjpa9mI2b5I 原文&#xff1a;【UE】制作插件_ue插件-CSDN博客 C制作插件 1. 我们可以在C工程中创建更多类型的插件&#xff0c;这里我们选择“空白”作为模板来创建插件 点击“创建插件”按钮后…...