Linux操作系统--文件的重定向以及文件缓冲区
目录
前言
一、文件描述符的分配规则
二、重定向
三、系统中的重定向接口
1、dup2()介绍
2、dup2()使用
1)输出重定向和追加重定向
2)输入重定向
四、文件缓冲区
1、定义
2、缓冲区刷新的条件
1)文件缓冲区存在的意义
2)刷新策略
3)一个重定向问题
五、命令行重定向的用法
前言
上一篇讲到了文件描述符,我们知道每次自己新创建的文件描述符都是默认从3开始的,因为stdin、stdout和stderr分别对应的0、1、2是默认打开的。所以后面是从3开始的。接下来我们分别关闭0、1、2的文件再创建新的文件看看有什么影响
一、文件描述符的分配规则
我们先关闭0号文件描述符所对应的文件,即关闭了stdin
可以看到新打开的文件的文件描述符变成了1。这说明文件描述符的分配规则是,从头遍历这个fd_array数组,如果看到哪一个文件描述符没有被使用,就将这个文件描述符分配给新打开的这个文件。
二、重定向
我们已经了解了文件描述符的分配规则,再来看一个现象,我们知道系统默认打开的三个文件分别是标准输入、标准输出和标准错误,分别对应着0、1、2文件描述符。1号文件描述符对应的是C语言中的stdout指针,其又被称为标准输出流,使用fprintf()可以向标准输出流写入内容,从而可以将写入的內容打印到显示器上,如果关闭了1号文件描述符,那么就不能向显示器输出信息了。
为什么此时屏幕没有输出呢?fprintf输出的数据去哪里了呢?
答:因为我们一开始就将1号文件描述符文件关闭了,此时再新打开一个文件时,系统就会将1号文件描述符分配给它,fprintf()是向stdout输出的,但是从fprintf的角度看,fprintf函数是C 语言函数,它并不知道操作系统已经将stdout关闭了,它只知道文件描述符1,所以,它会继续向文件描述符为1的对应文件写入,而我们知道文件描述符1已经分配给了新打开的文件,因此,此时fprintf函数会向新打开的文件写入,但是我们打开myfile.txt文件的时候会发现里面啥都没有。
这又是为什么呢?这就涉及到了刷新缓冲区的问题了。 我们先简单理解为输出的时候没有刷新缓冲区,此时没有办法输出到外设,我们此时可以强制刷新缓冲区。
上面所演示的就是所谓的输出重定向。将本来打印到标准输出流的信息,却打印到了刚刚打开的文件中。
如图所示:
在我们没有关闭默认的文件的情况下,打开新文件
当我们关闭标准输出时,再打开新文件:
此时 再向stdout流中写入数据,就不是在向标准输出写入数据了,而是在向打开的指定文件中写入数据。这就是一种重定向。
三、系统中的重定向接口
1、dup2()介绍
上面我们已经知道了通过关闭文件来实现重定向,但是这个未免也太过于麻烦,系统中已经给出了重定向的接口,我们先来介绍一个:dup2()
可以看到,dup2()接口的两个参数分别是两个文件描述符,并且newfd是oldfd的一份拷贝(实际上是将oldfd文件描述符里面的內容拷贝一份到newfd),dup2既然是一个重定向接口,那么其操作的就是两个文件,将一个文件重定向为另一个文件。
那么newfd和oldfd哪一个是重定向的文件,哪一个是被重定向的文件呢?实际上我们可以这么理解,在将oldfd文件描述符里面的內容拷贝一份到newfd,oldfd文件描述符保存的什么呢?保存的指向其所对应文件的指针,我们将oldfd的文件指针拷贝了一份给newfd,即覆盖后,newfd就不会找到原来它所对应的文件了,而是同样指向了oldfd所指向的文件,于是newfd和oldfd同时描述原来只由oldfd描述的文件。
2、dup2()使用
1)输出重定向和追加重定向
stdout
是一个FILE *
类型的流,它是C标准I/O库的一部分,而_fileno
是这个结构中的一个成员,它指向实际的文件描述符。然而,一旦stdout
流被关闭(例如通过fclose(stdout)
或重定向),stdout
流的状态就不再有效 。
可以看到成功将字符串重定向输出到指定文件夹中。
下面演示一下追加重定向
只需要将
2)输入重定向
类似输出重定向,来实现一个输出重定向
fgets()本来是从输入流中读取字符,但是我们用了重定向的接口,所以fgets()就从我们新打开的文件中获取字符。
四、文件缓冲区
我们到现在为止对文件缓冲区还没有一个深刻的认识,下面就来介绍一下Linux系统的文件缓冲区。
1、定义
文件缓冲区是一块内存空间,是存放进程向操作系统内核写入的数据的。
1、可以看到的现象是先打印了后面的,再打印的是前边的,这是为什么呢?
这种现象就和我们今天说的文件缓冲区有关,我们可以得出结论,系统调用接口write是不存在缓冲区的,所以调用write是直接向标准输出写数据,会直接在屏幕中打印出来。而printf()如果不刷新缓冲区的话,就不会打印信息出来,且C语言中的printf()底层一定是调用了write(),所以说它是在满足一定的条件下才会调用write()接口,这个一定条件就是缓冲区的刷新条件。
2、文件缓冲区在哪里呢?
文件缓冲区是在printf()内部使用的,write()接口并没有文件缓冲区,文件缓冲区本身就是由语言本身提供的,与操作系统是无关的。我们都知道C语言的FILE是一个结构体,里面封装了好多与文件相关的属性,其中就包括了文件缓冲区。我们在使用C语言的文件接口的时候,每次新打开一个文件都会返回一个FILE*,文件缓冲区就在这个FILE结构体中描述着,也就是说,C语言每个打开的文件都会有着自己的独立的文件缓冲区。
3、也就是说,我们只要使用底层调用了write()接口的C语言接口,例如printf,fprintf,fputs等,都会使用到C语言提供的文件缓冲区。只有在缓冲区被刷新时,才会真正调用write()接口向文件中写入数据。
2、缓冲区刷新的条件
如果我们考虑在刷新前就关闭了输出流,那么会发生什么?
如果没有关闭stdout,那么在当前进程退出的时候,缓冲区将会被刷新,这三个语句将会被打印在显示器上,但是我们在进程退出前关闭了stdout文件,所以就不会将这些语句从缓冲区刷新到显示器文件中了,即不会再打印出来了。我们不关闭显示器文件的运行结果如下:
所以缓冲区刷新的条件究竟是什么呢?首先我们来探讨一下缓冲区存在的意义是什么?
1)文件缓冲区存在的意义
- 我们知道进程有一种状态称为阻塞状态,即当前进程需要与其他硬件进行交互的时候(获取硬件资源),如果当前硬件资源被占用,那么它就会进入阻塞状态,等待硬件分配资源,我们通过程序向显示器文件中打印数据,也是一种与显示器资源交互,获取显示器资源的行为,如果当前显示器资源被占用,如果进程只为了打印一个语句而在这里一直处于阻塞状态,太过于浪费资源。有了缓冲区之后,就可以将数据先存储到缓冲区中,这样进程就可以去干点其他的事。
- 第二点就是文件缓区是用来减少I/O次数的,有了它之后我们可以减轻操作系统的负担,试想如果没有文件缓冲区,我们循环无休止地向显示器文件打印,则操作系统要不断进行I/O,这样会加重操作系统的负担。
2)刷新策略
有了上面的了解之后,我们就再来讨论什么样地刷新策略才能更好地适配操作系统呢。
- 无缓冲,立即刷新,每次存储在缓冲区地內容都会被立即写入系统的内核数据,并刷新缓冲区。
- 行刷新,即遇到‘\n'刷新,例如我们使用的printf()接口向显示器文件中写入数据的一般都采用的是行刷新策略,当输出的內容结尾处有'\n’时,会将'\n'及之前的数据都打印出来。
- 全刷新,即缓冲区满了再刷新。该策略一般在向块设备对应的文件如磁盘文件中写入数据时采用。
- 当进程退出的时候,文件缓冲区会自动刷新
- 使用fflush()函数强制刷新文件缓冲区。
注意事项:
- 一般C库函数写入文件时是全缓冲的,而写入显示器是行缓冲的。
- printf、fwrite库函数会自带缓冲区,当发生重定向到普通文件时,数据的缓冲方式就由行缓冲变成了全缓冲。
- 我们这里所提到的缓冲区都只是用户级缓冲区,其实OS也会提供相关内核级缓冲区,我们不做讨论。
3)一个重定向问题
我们运行以下代码
结果没有任何问题,因为fork()后创建的子进程只能从fork()之后开始执行
但是当我们将输出重定向到其他文件的时候就会出现如下结果
所以这是为什么呢?
输出重定向到了一个文件中. 那么文件缓冲区的刷新策略就改变了, 上面介绍过向文件中写入数据, 文件缓冲区的刷新策略是全刷新. 所以在执行前三个语句时, 会将三句话都存储到文件缓冲区内且不刷新. 而执行系统接口wirte()是没有缓冲区的, 所以会率先写入到文件中.
之后, 进程会创建子进程. 我们知道, 子进程和父进程在不修改数据时是共享一份代码和数据的. 而无论父子进程谁要修改数据, 就会发生写时拷贝. 子进程被创建时, 很明显父进程的文件缓冲区还没有被刷新. 那么也就是说子进程创建出来时, 是与父进程共享同一份文件缓冲区的。 那么接下来, 无论是子进程先终止, 还是父进程先终止, 都需要清除共享的文件缓冲区. 而fork()父子进程修改数据的机制是, 只要修改就会发生写时拷贝, 所以在进程要清除文件缓冲区时, 另一个进程会先拷贝一份 . 拷贝完成之后, 先终止的进程就会刷新文件缓冲区, 将缓冲区内的数据写入到文件中, 然后另一个进程终止, 将拷贝的文件缓冲区也刷新掉, 将相同的数据写入到文件中。
五、命令行重定向的用法
我们知道stdout和stderr都对应的是显示器,但是一个是标准输出,一个是标准错误,接下来我们向这两个中分别写入些数据查看结果。
接下来我们将输出结果使用符号重定向到其他文件中
这表示stdout、stderr虽然都是代表的显示器,但是并不是受到同一个控制的。默认的输出重定向是修改的标准输出,对标准错误不起作用,那么我们该如何控制标准错误呢?
1> 表示的是输出重定向, 2>表示的是错误重定向。所以在命令行中,重定向的完整正确用法是这样的——fd > 文件
0 > 是输入重定向 1 >是输出重定向 2 >是错误重定向 >>代表的是追加重定向
我们还可以同时输出重定向和错误重定向
这样的用法可以分离程序的运行日志,可以将运行错误的日志分离出来以便分析。
将输出、错误重定向同时重定向到同一个文件
相关文章:
Linux操作系统--文件的重定向以及文件缓冲区
目录 前言 一、文件描述符的分配规则 二、重定向 三、系统中的重定向接口 1、dup2()介绍 2、dup2()使用 1)输出重定向和追加重定向 2)输入重定向 四、文件缓冲区 1、定义 2、缓冲区刷新的条件 1)文件缓冲区存在的意义 2&…...
Linux 远程连接服务
远程连接服务器简介 什么是远程连接服务器 远程连接服务器通过文字或图形接口方式来远程登录系统,让你在远程终端前登录linux主机以取得可操 作主机接口(shell),而登录后的操作感觉就像是坐在系统前面一样。 远程连接服务器的功…...
Chrome控制台 网站性能优化指标一览
打开chrome-》f12/右键查看元素-》NetWrok/网络 ctrlF5 刷新网页,可以看到从输入url到页面资源请求并加载网页,用于查看资源加载,接口请求,评估网页、网站性能等,如下图: request、stransferred、resour…...
【SpringBoot】使用IDEA创建SpringBoot项目
1、使用SpringBoot脚手架创建 我们使用SpringBoot的脚手架Spring Initializr创建,如图所示: 2、选择SpringBoot版本 最开始做项目时候,组长说创建一个 springboot 2.5.4 的项目,mysql使用 5.6.X ,maven使用是3.6.X…...
Mysql锁
锁的分类 基于锁的属性分类:共享锁、排它锁。基于锁的粒度分类:表锁、行锁、记录锁、间隙锁、临键锁。基于锁的状态分类:意向共享锁、意向排它锁。 排他锁与任何的锁都不兼容,共享锁仅和共享锁兼容。由于MVCC的存在,…...
深入浅出:PHP中的数据类型全解析
文章目录 引言理解数据类型标量类型整数 (integer)浮点数 (float)布尔值 (boolean)字符串 (string) 复合类型数组 (array)对象 (object)资源 (resource)NULL 特殊类型Callable强制类型转换 实战案例总结与展望参考资料 引言 在编程的世界里,数据类型是构建任何应用…...
030.随机指纹chromium编译-修改windows操作系统版本
一、目标: 1.了解js是如何获取windows版本的。2.如何从c层面修改chromium源码,修改win系统版本 二、js是如何获取windows系统版本: 将下面的js复制到F12控制台 async function detectWindowsVersion() {let userAgent navigator.userAge…...
IP 协议
IP协议 一、介绍1、IP协议2、IPv43、IPv6 二、主要功能三、协议格式1、示意图2、说明 四、网段划分1、介绍2、目的3、方法4、步骤 五、基于类别的IP地址分配方式1、示意图2、范围 六、CIDR1、介绍2、组成3、优点4、示意图 七、子网掩码1、介绍2、功能3、表示方法4、CIDR表示法5…...
【Docker】创建Docker并部署Web站点
要在服务器上创建Docker容器,并在其中部署站点,你可以按照以下步骤操作。我们将以Flask应用为例来说明如何完成这一过程。 1. 准备工作 确保你的服务器已经安装了Docker。如果没有,请根据官方文档安装: Docker 安装指南 2. 创…...
【C语言的奥秘9】数据类型总结
一、数据类型的介绍 数据类型是按被定义变量的性质,表示形式,占据存储空间的多少,构造特点来划分的。在C语言中,数据类型可分为:基本数据类型,构造数据类型,指针类型,空类型四大类。 基本数据类…...
EasyExcel注解使用
上接《Springboot下导入导出excel》,本篇详细介绍 EasyExcel 注解使用。 1. ExcelProperty value:指定写入的列头,如果不指定则使用成员变量的名字作为列头;如果要设置复杂的头,可以为value指定多个值orderÿ…...
什么是多模态和模态
文章目录 前言一、定义1. 模态 (Modal)2. 非模态 (Non-modal) 二、GUI中1. 模态(Modal)对话框2. 非模态(Modeless)对话框 三、模态 vs 非模态 的对比四、何时使用模态和非模态对话框?五、Qt 中 exec() 与 show() 的区别…...
【系统架构设计师】真题论文: 论NoSQL数据库技术及其应用(包括解题思路和素材)
更多内容请见: 备考系统架构设计师-专栏介绍和目录 文章目录 真题题目(2018年 试题4)解题思路论文素材参考真题题目(2018年 试题4) 随着互联网 web2.0 网站的兴起,传统关系数据库在应对 web2.0 网站,特别是超大规模和高并发的 web2.0 纯动态 SNS 网站上已经显得力不从心…...
TCP/IP 协议图--计算机网络体系结构分层
计算机网络体系结构分层 计算机网络体系结构分层 不难看出,TCP/IP 与 OSI 在分层模块上稍有区别。OSI 参考模型注重“通信协议必要的功能是什么”,而 TCP/IP 则更强调“在计算机上实现协议应该开发哪种程序”...
【Android】Intent类详解
目录 引言 一、Intent的定义 二、Intent的用途 三、Intent的七大属性 四、Intent的种类 4.1 显式Intent 4.2 隐式Intent 五、代码示例 5.1 activity_intent.xml 5.2 IntentActivity.java 5.3 AndroidManifest.xml 5.4 实现效果 结语 引言 Intent在Android开发…...
【LeetCode刷题之路】64.最小路径和 (动态规划入门)
LeetCode刷题记录 🌐 我的博客主页:iiiiiankor🎯 如果你觉得我的内容对你有帮助,不妨点个赞👍、留个评论✍,或者收藏⭐,让我们一起进步!📝 专栏系列:LeetCode…...
Facebook:筑牢隐私安全堡垒,守护社交净土
在全球社交媒体平台中,Facebook一直是风靡全球的佼佼者。然而,随着数字化信息的迅速膨胀,用户隐私保护的重要性日益凸显。面对用户对数据安全性的高度重视,Facebook致力于通过一系列措施来确保隐私保护,守护每位用户的…...
MongoDB 索引类型详解
MongoDB 索引类型详解 在 MongoDB 中,索引是提高查询效率、优化数据库性能的重要手段。MongoDB 支持多种类型的索引,每种索引类型适用于不同的查询需求和场景。本文将详细介绍 MongoDB 中几种常见的索引类型、示例及其限制。 1. 单字段索引(…...
国家信息中心单志广:智慧城市转型中的数据要素价值释放
今日,由中国电信集团主办的2024数字科技生态大会数据要素合作论坛在广州市举办。国家发改委国家信息中心信息化和产业发展部主任单志广在论坛发展主旨演讲:智慧城市转型中的数据要素价值释放,主要包括发展新形势、数据新要素、数据新产权、数…...
底层逻辑之:欧拉-拉格朗日方程(Euler-Lagrange equations)变分法(Calculus of Variations)的核心思想
0前言: 0.1 17世纪的泛函(Functional)分析与变分法(Calculus of Variations) 在17世纪,数学家们开始遇到一些需要处理函数集合的问题,这些问题涉及到函数的极值、曲线的长度、曲面的面积等。这…...
2024-12-03OpenCV图片处理基础
OpenCV图片处理基础 OpenCV的视频教学:https://www.bilibili.com/video/BV14P411D7MH 1-OpenCV摄像头读取 OpenCV使用摄像头读取图片帧,点击S保存当前帧到指定文件夹,点击Q关闭窗口,点击其他按钮打印按钮的值 要实现这个功能&…...
【汇编语言】标志寄存器(二) —— 标志位驱动的计算:ADC、SBB 和 CMP 的巧妙应用
前言 📌 汇编语言是很多相关课程(如数据结构、操作系统、微机原理)的重要基础。但仅仅从课程的角度出发就太片面了,其实学习汇编语言可以深入理解计算机底层工作原理,提升代码效率,尤其在嵌入式系统和性能优…...
Java刷题训练第一期
个人主页:手握风云 专栏:Java刷题训练营 1. 字符转ASCII码 问题描述:BoBo教KiKi字符常量或字符变量表示的字符在内存中以ASCII码形式存储。BoBo出了一个问题给KiKi,输入一个字符,输出该字符相应的ASCII码。 输入描述…...
【leetcode100】矩阵置零
1、题目描述 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用原地算法。 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]] 2、初始思路 2…...
【MySQL 进阶之路】SQL 优化
6.SQL 性能分析笔记 在现代数据库的高并发环境下,SQL 查询优化成为提升系统性能和响应速度的关键。本文将总结常见的 SQL 优化策略,包括插入优化、主键设计、排序优化、GROUP BY 优化等,帮助你在面对大规模数据时,做到高效查询和…...
本地部署开源趣味艺术画板Paint Board结合内网穿透跨网络多设备在线绘画
文章目录 前言1.关于Paint Board2.本地部署paint-board3.使用Paint Board4.cpolar内网穿透工具安装5.创建远程连接公网地址6.固定Paint Board公网地址 前言 大家好,是不是每次想要在电脑上画画时,都被那些笨重的专业绘图软件搞得头大如斗呢?…...
位图(bitmap)和布隆过滤器(bloom_filter)
1.位图-Bitmap 1.1问题引入 :给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中? 40亿个无符号整数大约16G的大小,用map或者set显然是无法支持海量数据的存储。那么我们能否不存储数…...
如何使用JDBC向数据库中插入日期数据???
在学习JDBC 的过程中很多小明有疑问在IDEA编辑器是如何插入一个日期类型的数据的,此篇一些方法希望可以帮助到你。 示例: import java.text.ParseException; import java.text.SimpleDateFormat; import java.sql.Date; import java.util.Scanner;publi…...
电子系统设计实验4 信号发生电路设计实验
一、实验目的 1. 掌握正弦信号发生器的设计方法。 2. 掌握方波发生器的设计方法。 二、实验内容及结果 1. 实验内容 设计一用于RFID读卡器测试的幅移键控发生器(ASK),其结构如图4-1所示。正弦振荡器输出频率为150kHz,幅度为3V…...
【Docker】Linux与Windows系统安装Docker+Docker上简单安装MySQL
一、Windows安装Docker 由于我在许多平台搜索Windows下安装Docker的方法,都提到了Win10家庭版无法直接安装Docker。个人电脑就是Win10家庭版,本着实践出真知的想法,个人在本机Win10家庭版实验结果为需要采用下述传统手动安装的办法ÿ…...
linux更新镜像源
镜像源地址 1 阿里云 http://mirrors.aliyun.com/ubuntu/ 2 网易源 http://mirrors.163.com/ubuntu/ 3 浙大源 http://mirrors.zju.edu.cn/ubuntu 4 中科大源 http://mirrors.ustc.edu.cn/ubuntu/ 5 清华源 http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ 更新镜像源 此处…...
HarmonyOS 5.0应用开发——UIAbility生命周期
【高心星出品】 文章目录 UIAbility组件创建AbilityUIAbility的生命周期Create状态WindowStageCreate状态Foreground和Background状态WindowStageWillDestroy状态Destroy状态 UIAbility组件 UIAbility组件是一种包含UI的应用组件,主要用于和用户交互。 UIAbility组…...
【Linux】C语言实现简易的Linux shell命令行解释器
我们要实现自己的简易的shel,先了解一下shell运行原理。 1. shell运行原理 shell从用户读入字符串"ls"。shell建立一个子进程,在子进程中运行ls程序并等待进程结束。 然后shell读取新的一行输入,建立一个新的子进程,在…...
构建个人大模型问答助手(基于Streamlit +gpt-4o/o1-mini):全面解析与实现
在当今人工智能迅猛发展的时代,构建一个个人化的大模型问答助手不仅能够提高工作效率,还能为日常生活带来便利。本篇博客将详细解析如何使用Python和Streamlit框架,结合OpenAI的API,搭建一个类似于ChatGPT的问答系统。我们将分步骤…...
10.请求拦截和响应拦截
文章目录 前言前景回顾拦截器应用请求拦截器响应拦截器测试响应拦截器原理 总结 前言 优秀的设计总是少不了丰富的扩展点, 比如spring可以自动装配, aop扩展, web模块也有拦截器, 甚至对servlet的过滤器都有封装; 再比如netty、doubbo等等都支持在数据流入流出都允许用户自定义…...
github使用SSH进行克隆仓库
SSH 密钥拉取git 查询密钥是否存在 s -al ~/.ssh这个文件夹下 known_hosts 就是存在的密钥文件 创建密钥文件 ssh-keygen -t rsa -b 4096 -C "testtt.com"-t rsa 是 rsa 算法加密 -b 是指定密钥的长度(以位为单位)。 -C 是用于给密钥添加注…...
如何成长为一名工程技术经理
https://medium.com/srivatsan-sridharan/how-to-grow-as-an-engineering-manager-687cad0bcac7 作为一名工程技术经理,你可能已经积累了丰富的团队管理经验,并展示了出色的项目管理、优先级管理和员工指导能力。然而,尽管如此,你…...
前端热门面试题目(四五六七)
1. 使用 import 时,Webpack 如何处理 node_modules 中的依赖? 依赖解析: Webpack 遇到 import 时,利用 resolve 配置查找依赖。如果是第三方依赖(node_modules),Webpack 会优先查找其主入口&…...
三、使用 Maven:命令行环境
文章目录 1. 第一节 实验一:根据坐标创建 Maven 工程1.1 Maven 核心概念:坐标1.2 实验操作1.3 Maven核心概念:POM1.4 Maven核心概念:约定的目录结构 2. 实验二:在 Maven 工程中编写代码2.1 主体程序2.2 测试程序 3. 执…...
深度学习在网络管理中的应用:智能化的新时代
网络管理在现代信息技术中占据着举足轻重的地位。随着网络规模的扩大和复杂性的增加,传统的网络管理手段已经无法满足日益增长的需求。深度学习作为人工智能的一个重要分支,通过其强大的数据处理和模式识别能力,为网络管理带来了新的契机。本…...
微信小程序日期格式化报错: iOS 下无法正常使用,iOS 只支持 “yyyy/MM/dd“、“yyyy/MM/dd HH:mm:ss“、“yyyy-
微信小程序日期格式化报错 报错内容解决办法 报错内容 at formatDate (http://127.0.0.1:10118/appservice-hotreload/pages/index/index.js?1;:103:18) new Date(“2024-11-27 15:05:23”) 在部分 iOS 下无法正常使用,iOS 只支持 “yyyy/MM/dd”、“yyyy/MM/dd H…...
第K大数求解方案
思想:利用快速排序的思想,从数组S中随机找出一个元素X,把数组分为两部分Sa和Sb。Sa中的元素大于等于X,Sb中元素小于X。这时有两种情况: 1. Sa中元素的个数小于k,则Sb中的第k-|Sa|个元素即为第k大数…...
【AI系统】MobileFormer
MobileFormer 在本文中,将介绍一种新的网络-MobileFormer,它实现了 Transformer 全局特征与 CNN 局部特征的融合,在较低的成本内,创造一个高效的网络。通过本节,让大家去了解如何将 CNN 与 Transformer 更好的结合起来…...
《重生之我学VTK》-- 基本介绍与相关概念
目录 简介 可视化模型 示例(圆锥体) VTK官方用户手册(中文C版)附末尾,有需要的直接划到末尾 简介 VTK(Visualization Toolkit)是一个开源的、跨平台的软件系统,主要用于三维计算机图…...
HTML笔记()蜘蛛纸牌之卡牌拖拽
效果 代码 <!DOCTYPE html> <html><head><style>body{display: flex;justify-content: center;align-items: center;height: 100vh;background-color: #2b2b2b;position: relative;}.card{/*设置卡牌的外观*/width: 150px;height: 200px;background-…...
记一次跑前端老项目的问题
记一次跑前端老项目的问题 一、前言二、过程1、下载依赖2、启动项目3、打包 一、前言 在一次跑前端老项目的时候,遇到了一些坑,这里记录一下。 二、过程 1、下载依赖 使用 npm install下载很久,然后给我报了个错 core-js2.6.12: core-js…...
041_Compare_Matrix_Squre_Sum_in_MATLAB中矩阵平方和的比较
矩阵平方和的计算 矩阵平方和的定义 矩阵平方和的定义是对矩阵中的每一个元素进行平方,然后求和。 对于一个矩阵 A A A,其平方和定义为: sum ∑ i 1 m ∑ j 1 n A ( i , j ) 2 \text{sum} \sum_{i1}^{m}\sum_{j1}^{n} A(i,j)^2 sumi1∑…...
vue3中 axios 发送请求 刷新token 封装axios
service.js 页面 import axios from axios // 创建axios实例 const instance axios.create({baseURL: http://gcm-test.jhzhkj.cn:8600/h5card/,timeout: 5000, // 请求超时时间headers: {get: {Content-Type: application/x-www-form-urlencoded},post: {Content-Type: appl…...
vue+mars3d叠加展示arcgis动态服务
数据格式:使用arcgis发布的动态服务 叠加和移除arcgis服务图层的方法 //加载arcgis地图服务function arcgisServer(i,d,m,p){i[d.data] new mars3d.layer.ArcGisLayer({name:d.label,url:p,flyTo: true})m.addLayer(i[d.data])}//移除arcgis服务范围线function rem…...
PostgreSQL 中进行数据导入和导出
在数据库管理中,数据的导入和导出是非常常见的操作。特别是在 PostgreSQL 中,提供了多种工具和方法来实现数据的有效管理。无论是备份数据,还是将数据迁移到其他数据库,或是进行数据分析,掌握数据导入和导出的技巧都是…...