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

【Linux-基础IO】C语言文件接口回顾 系统文件概念及接口

目录

一、C语言文件接口回顾

C语言基础知识

C++中文件操作示例

二、系统文件概念及接口

重定向基本理解的回顾

文件的基本概念

系统调用接口

open

read

write

close

lseek

什么是当前路径


 

一、C语言文件接口回顾

引言:我们并不理解文件!从语言角度(绝对不可能理解)。我们要进行文件操作,前提是我们的程序跑起来了。文件的打开和关闭,是CPU在执行我们的代码

C语言基础知识

几个函数:

FILE *fopen(const char *path, const char *mode);` 

fopen是C语言标准库函数,用于打开一个文件并返回一个文件指针以便进行读写操作。如果文件打开成功,它会返回一个指向 FILE 类型的指针,该指针后续可以用于其他文件操作函数。如果打开失败,则返回 NULL

其中:

  • const char *path:这是一个字符串,表示要打开的文件的路径名。可以是相对路径或绝对路径。

  • const char *mode:这也是一个字符串,表示打开文件的模式,即如何使用文件

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

fread 函数是 C 标准库中的一个函数,用于从指定的流中读取数据到缓冲区中。该函数同样定义在 stdio.h 头文件中。fread 主要用于二进制输入操作。fread 函数返回成功读取的元素个数,这个数可能小于 nmemb,如果遇到错误或文件末尾。如果文件末尾在读取任何字节之前到达,fread 将返回 0。

其中:

  • ptr:指向内存块的指针,该内存块至少要有 size * nmemb 字节的大小。函数从流中读取数据到这个内存块中。

  • size:要读取的每个元素的大小,以字节为单位。

  • nmemb:要读取的元素个数,每个元素的大小为 size 字节。

  • stream:指向 FILE 对象的指针,该对象指定了输入流。

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

fwrite 函数是 C 标准库中的一个函数,用于将数据写入到指定的流中。这个函数也是定义在 stdio.h 头文件中。fwrite 主要用于执行二进制输出操作。fwrite 函数返回成功写入的元素个数,这个数可能小于 nmemb,如果遇到写入错误。如果成功写入 nmemb 个元素,则返回值等于 nmemb

其中:

  • ptr:指向要写入数据的内存块的指针。

  • size:要写入的每个元素的大小,以字节为单位。

  • nmemb:要写入的元素个数,每个元素的大小为 size 字节。

  • stream:指向 FILE 对象的指针,该对象指定了输出流

int fprintf(FILE *stream, const char *format, ...);

fprintf 是 C 标准库中的一个函数,用于将格式化的数据写入到指定的流(通常是文件流)。这个函数与 printf 类似,但是 fprintf 允许你指定写入数据的流,而 printf 默认写入到标准输出(通常是控制台)。如果成功,fprintf 返回写入的字符数。如果发生错误,fprintf 返回一个负数。

其中

  • stream:指向 FILE 对象的指针,该对象标识了要写入数据的流。

  • format:指向一个以空字符结尾的字符串,该字符串包含格式规范,用于指定如何写入后续参数。

  • ...:可变数量的参数,它们将被格式化并写入到流中。

int fclose(FILE *stream);

fclose 是 C 标准库中的一个函数,用于关闭由 fopenfreopen 或其他文件打开函数创建的文件流。关闭文件是非常重要的,因为它会释放与文件流关联的所有内部缓冲区,并且确保所有写入的数据都已经被正确地刷新到磁盘上。

其中:

  • 如果文件成功关闭,fclose 返回 0

  • 如果在关闭文件时发生错误,fclose 返回 EOF(通常定义为 -1)。

文件打开方式:

2accc902d1c9494685aaebbdbb625983.png

几个例子:

【示例1】

int main()
{FILE* fp = fopen("log.txt","w");if(fp == NULL){perror("fopen");return 1;}fprintf(fp, "helloworld, %d, %s, %lf\n", 10, "wuxu", 3.14);fclose(fp);return 0;
}

执行结果:

[wuxu@Nanyi lesson18]$ ls
makefile  mytest  test1.c
[wuxu@Nanyi lesson18]$ ./mytest
[wuxu@Nanyi lesson18]$ ls
log.txt  makefile  mytest  test1.c
[wuxu@Nanyi lesson18]$ cat log.t

可以发现,我们以写的方式打开log.txt,我们原先并没有log.txt,是“w”的方式,创建了一个log.txt 并向内格式化写入内容

如果我们修改一下 main函数里的格式化输出,再进行执行

将代码修改为

 fprintf(fp, "helloworld, %d, %s, %d\n", 10, "wuxu", 666);   

699b7088fc6f425ab601a1e74e14c543.png

可以发现:原文件内容被内容完全替代,因此我们对于“w”有个结论

  1. 如果文件不存在,就在当前路径下,新建指定的文件

  2. 默认打开文件的时候,就会先把目标文件清空

如果我们想追加对文件进行写入就需要讲模式换为“a”模式

C++中文件操作示例

#include <iostream>
#include <string>
#include <fstream>#define FILENAME "log.txt"int main()
{std::ofstream out(FILENAME);if(!out.is_open()) return 1;std::string message = "hello C++\n";out.write(message.c_str(), message.size());out.close();return 0;
}

 dc6994291dda4fe2abf42db4883f5b10.png

二、系统文件概念及接口

重定向基本理解的回顾

我们第一次理解重定向是在 echo命令上理解的,echo 命令本身是向显示器进行输出

[wuxu@Nanyi lesson18]$ echo "hello I am echo"
hello I am echo

我们也可以使用echo命令,向指定文件进行写入 

9ed9aa3fbe114822b9cf5bc2719f0497.png

我们也可以使用echo命令,向文件进行追加写入,也就是追加重定向

ae950d47677c4aabb6704fcfdc93a1c7.png 

那么我们也就发现 > 相当于 "w" , >> 相当于 “a“,如果是的话,我们也可以使用 > 或 >> 进行创建文件

8e0b4161ba5743d89fe9e47c5c3b0fb5.png 

所以我们也就发现:输出重定向一定是文件操作

文件的基本概念

当我们使用ls-l查看文件信息时,会显示文件的类型、权限、引用计数、所有者、所属组、大小、文件最新修改时间等信息,这些都是文件的属性

736487f8e7774044b32f68224d8940cb.png

由此我们可以知道:文件 = 内容+属性

 

文件被打开,需要先被加载到内存。由于内存空间有限,不可能将所有的文件全部打开,所以文件可以分为已被打开文件,和未打开文件。

打开文件:本质是进程打开文件。文件没有打开的时候,文件在磁盘中;

一个进程可以打开很多文件,一个系统中可以存在很多进程;所以很多情况下,在操作系统内部,一定存在大量被打开的文件,那么操作系统是如何对这些文件进行管理呢?--->**先描述,在组织

系统调用接口

文件是存在磁盘中的,由冯诺伊曼体系我们可知,磁盘是一个外设,外设是一个硬件。我们向文件中写入,本质是向硬件中写入;但是用户没有权利直接写入,由于操作系统是硬件的管理着,那我们就可以通过操作系统给我们提供的系统调用(OS不相信任何人)来访问文件

09c7ff59146f416e9bdf84ebdab79968.png

下面是系统调用接口的函数,我们来一一介绍使用,看看与C/C++文件操作有什么共同点与不同点

open

6578540c8382491090efb06444d0923d.png 

 

其中:

  • pathname:指向一个以空字符结尾的字符串,该字符串指定了要打开或创建的文件的路径名。

  • flags:指定文件的打开模式。这个参数是以下选项中的一个或多个通过按位或操作(|)组合起来的值:

    • O_RDONLY: 只读打开。

    • O_WRONLY: 只写打开。

    • O_RDWR: 读写打开。

    • O_CREAT: 如果文件不存在,则创建它。需要与 mode 参数一起使用。

    • O_EXCL: 与 O_CREAT 一起使用,确保调用 open 时创建文件。如果文件已存在,则返回错误。

    • O_TRUNC: 如果文件已存在且为写入或读写打开,则将其长度截断为 0。

    • O_APPEND: 追加模式。在每次写入时,数据会被添加到文件的末尾。

    • 其他标志请参考 open 的手册页。

  • mode:当创建新文件时,这个参数指定了文件的模式(权限)。它是一个八进制数,通常由 umask 的值与要求的权限按位取反后相与得到。常见的权限值包括:

    • S_IRUSR: 用户读权限。

    • S_IWUSR: 用户写权限。

    • S_IXUSR: 用户执行权限。

    • S_IRGRP, S_IWGRP, S_IXGRP: 分别对应组成员的读、写、执行权限。

    • S_IROTH, S_IWOTH, S_IXOTH: 分别对应其他用户的读、写、执行权限。

    • 也可以使用数字来表示权限

返回值:

  • 成功时,open 返回一个最小的非负整数,称为文件描述符,用于后续的读写操作。

  • 出错时,open 返回 -1,并设置 errno 来指示错误。

flag选项描述
O_RDONLY只读
O_WRONLY只写
O_CREAT不存在就创建
O_TRUNC清空文件
O_APPEND追加写入

这些选项都是大写,我们在C/C++中什么情况下用上大写?没错就是宏,这里的flag选项与宏并未区别,我们先自己用宏来创建一个传参示例

测试内容:

#include <stdio.h>
#define ONE   1      // 1 0000 0001
#define TWO   (1<<1) // 2 0000 0010
#define THREE (1<<2) // 4 0000 0100
#define FOUR  (1<<3) // 8 0000 1000void print(int flag)
{if(flag&ONE)printf("one\n"); //替换成其他功能if(flag&TWO)printf("two\n");if(flag&THREE)printf("three\n");if(flag&FOUR)printf("four\n");
}int main()
{print(ONE);printf("\n");print(TWO);printf("\n");print(ONE|TWO);printf("\n");print(ONE|TWO|THREE);printf("\n");print(ONE|FOUR);printf("\n");print(ONE|TWO|THREE|FOUR);printf("\n");return 0;
}

输出结果:

2e89f5311332447daccc36ddd96f02ac.png

因此我们发现可以定制宏,通过传入不同的宏,实现定制的不同功能。它的原理底层是位图;一个int类型包含32个比特位,如果我们让低位的 1 表示ONE,次低位的 1 表示 TWO......

30560bf199f04dbbb34df9c09a2eb96e.png 

若此时要实现ONE、TWO、THREE,只需要对这三个数做或位运算ONE|TWO|THREE则会得到一个值为00000000 00000000 00000000 00011010的flags。将它传递给处理函数中,处理函数会将flag与ONE、TWO、THREE这三个数挨个做按位与,如果按位与出来的结果不为0,则表示该选项会被选择

而我们系统调用的flags也是一样的道理

接下来让我们用系统调用接口来操作文件

【示例】

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>int main(){//system callint fda = open("loga.txt", O_WRONLY | O_CREAT | O_TRUNC, 0666);printf("fda: %d\n", fda);int fdb = open("logb.txt", O_WRONLY | O_CREAT | O_TRUNC, 0666);printf("fdb: %d\n", fdb);int fdc = open("logc.txt", O_WRONLY | O_CREAT | O_TRUNC, 0666);printf("fdc: %d\n", fdc);int fdd = open("logd.txt", O_WRONLY | O_CREAT | O_TRUNC, 0666);printf("fdd: %d\n", fdd);return 0;
}

 输出结果:

c6ee621585c34c46b075227e41a4c7df.png

 

【问题1】我们定制的权限是666 ,为什么这里是 662?是umask的原因

PS:我们使用系统接口必须要指明权限,否则创建的文件权限是随机的

在 POSIX 兼容的操作系统中,umask 是一个系统调用,用于设置进程的文件模式创建掩码(file mode creation mask)。这个掩码定义了新创建文件的默认权限,通过从权限掩码中“掩蔽”掉一些权限位来限制新文件的权限。我们来查看一下系统的umask

13a7f1cdfa0440fa8f85a032edc63e26.png

接下来我们修改一下umask,看文件权限能不能达到我们想要的结果

在test2.c 加入umask(0)即可

测试结果:

9e83bce22bf845f194788ce4630dcc3c.png

 

【问题2】open系统调用函数返回的数字是什么?这个输出结果有什么含义?

open打开文件后会返回一个数字,这个数字被称为文件描述符,我们一会在下文详细讲解

read

b4287fe0a244451287dd71d9bb594627.png

要从某个文件中读取内容时,第一个参数需要传入该文件的文件描述符,第二个参数需要传入接收文件内容的缓冲区首地址,第三个参数表示要从文件中读取多少字节的内容。

下面程序模拟实现了C语言fopen的r(只读)打开模式

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>int main()
{int fd = open("./log.txt", O_RDONLY);char buffer[1024];read(fd, buffer, sizeof(buffer));printf("%s", buffer);return 0;
}

 6c4f43937af0488ab1c745c230f04894.png

write

write 是 POSIX 系统调用之一,用于将数据写入文件描述符指向的文件或设备。这个函数在 C 语言中被广泛使用,尤其是在 UNIX、Linux 和其他 POSIX 兼容的操作系统中。

b1abe68ccd9845d5975db7b05f9c08de.png

 

参数:

  • fd:要写入数据的文件描述符。这个文件描述符可以是 open 系统调用返回的,也可以是标准输入输出错误文件描述符(例如 STDOUT_FILENOSTDERR_FILENO)。

  • buf:指向要写入数据的缓冲区的指针。

  • count:要写入的字节数。

返回值:

  • 成功时,write 返回实际写入的字节数。

  • 出错时,write 返回 -1,并设置 errno 来指示错误。

 

下面程序模拟实现C语言fopen的w(只读)模式打开

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>int main()
{int fd = open("./log.txt", O_WRONLY | O_CREAT | O_TRUNC, 0666);char* msg = "Have a good day!\n";write(fd, msg, strlen(msg));return 0;
}

2ff3f8983c3747e8b6b38efa1073a742.png

下面程序模拟实现C语言fopen的a(追加)模式打开

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>int main()
{int fd = open("./log.txt", O_WRONLY | O_CREAT | O_APPEND, 0666);char* msg = "Have a good day!\n";write(fd, msg, strlen(msg));return 0;
}

 51f6a6d9006343f58c6d44935025701c.png

close

8178bfd939784e3e9afca8eedc193119.png 

传入文件描述符即可关闭对应文件,这里就不掩饰了

lseek

lseek 是 POSIX 系统调用之一,用于设置文件描述符 fd 指向的文件的偏移量。这个函数允许你查询或修改文件流的当前位置,这对于随机访问文件非常有用。

d6197ae77ee341cc98c8db326939f012.png

 

参数:

  • fd:文件描述符,指向已经打开的文件。

  • offset:偏移量,根据 whence 的值,这个偏移量可以是绝对值,也可以是相对值。

  • whence:用于确定如何解释offset的值。它可以是以下三个常量之一:

    • SEEK_SET: 将偏移量设置为从文件开头算起的绝对位置。

    • SEEK_CUR: 将偏移量设置为相对于当前文件位置的相对位置。

    • SEEK_END: 将偏移量设置为相对于文件末尾的相对位置。

返回值:

  • 成功时,lseek 返回新的文件偏移量。

  • 出错时,lseek 返回 -1,并设置 errno 来指示错误。

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>int main()
{int fd = open("./log.txt", O_RDONLY | O_APPEND, 0666);char buffer[1024];read(fd, buffer, sizeof(buffer));printf("%s", buffer);//回到文件头再读一遍lseek(fd, 0, SEEK_SET);read(fd, buffer, sizeof(buffer));printf("%s", buffer);close(fd);return 0;
}

d277bc9b7d5f4feb806adfe0f8f20435.png

什么是当前路径

当我们没有指明文件路径,open一个文件时,则open将在当前路径下创建文件那为什么会这个样子呢?

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>int main()
{int fd = open("log.txt", O_CREAT);close(fd);sleep(200);return 0;
}

当程序运行起来后,我们可以使用ps ajx | head -1 && ps ajx | grep mytest | grep -v grep 查看运行该程序的进程pid,进入/proc/进程pid目录,可以看到两个链接文件cwd和exe。其中,cwd是程序的工作路径,也就是我们常说的当前路径,而exe是可执行程序的保存位置。

42199962d22d4069a25a5790e058e94a.png

 

相关文章:

【Linux-基础IO】C语言文件接口回顾 系统文件概念及接口

目录 一、C语言文件接口回顾 C语言基础知识 C中文件操作示例 二、系统文件概念及接口 重定向基本理解的回顾 文件的基本概念 系统调用接口 open read write close lseek 什么是当前路径 一、C语言文件接口回顾 引言&#xff1a;我们并不理解文件&#xff01;从语…...

系统架构笔记-3-信息系统基础知识

知识要点 结构化方法&#xff1a;结构是指系统内各个组成要素之间的相互联系、相互作用的框架。结构化方法也称为生命周期法&#xff0c;是一种传统的信息系统开发方法&#xff0c;由结构化分析、结构化设计、结构化程序设计三部分有机组合而成&#xff0c;精髓是自顶向下、逐…...

Linux下编程实现网络传送文件

本程序是在Linux下开发的,使用的是C语言,再结合Socket进行编程,分为客户端和服务器两个程序,即采用的是C/S架构,相应的源代码如下: 服务器端: #include <stdio.h> //#include <stdlib.h> #include <sys/socket.h> #include <netinet/in.h&g…...

【速成Redis】04 Redis 概念扫盲:事务、持久化、主从复制、哨兵模式

前言&#xff1a; 前三篇如下&#xff1a; 【速成Redis】01 Redis简介及windows上如何安装redis-CSDN博客 【速成Redis】02 Redis 五大基本数据类型常用命令-CSDN博客 【速成Redis】03 Redis 五大高级数据结构介绍及其常用命令 | 消息队列、地理空间、HyperLogLog、BitMap、…...

SQL Server 2022的数据类型

新书速览|SQL Server 2022从入门到精通&#xff1a;视频教学超值版_sql server 2022 出版社-CSDN博客 《SQL Server 2022从入门到精通&#xff08;视频教学超值版&#xff09;&#xff08;数据库技术丛书&#xff09;》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) 数据类…...

Linux基础3-基础工具4(git),冯诺依曼计算机体系结构

上篇文章&#xff1a;Linux基础3-基础工具3&#xff08;make,makefile,gdb详解&#xff09;-CSDN博客 本章重点&#xff1a; 1. git简易使用 2. 冯诺依曼计算机体系结构介绍 目录 一. git使用 1.1 什么是git? 1.2 git发展史 1.3 git创建仓库 1.4 git命令操作 二. 冯诺依…...

后台数据管理系统 - 项目架构设计-Vue3+axios+Element-plus(0916)

接口文档: https://apifox.com/apidoc/shared-26c67aee-0233-4d23-aab7-08448fdf95ff/api-93850835 接口根路径&#xff1a; http://big-event-vue-api-t.itheima.net 本项目的技术栈 本项目技术栈基于 ES6、vue3、pinia、vue-router 、vite 、axios 和 element-plus http:/…...

MySQL基础篇(黑马程序员2022-01-18)

1 MySQL数据库概述 1.1 MySQL数据库的下载,安装,启动停止 1.2 数据模型 (1)关系型数据库(RDBMS) 概念&#xff1a;建立在关系模型基础上&#xff0c;由多张相互连接的二维表组成的数据库。 特点&#xff1a; A. 使用表存储数据&#xff0c;格式统一&#xff0c;便于维护。…...

nodejs 013:Prect 样式复用(multiple classes)例子

Prect 简单示例 Prect 为使用相同的现代 API 的快速 3kB React 替代方案。代码形式与 React 基本相同。部分语法区别可见 prect-differences-to-react。以下是一个 Prect 简单示例。 Button目录Button.css&#xff1a; .this {display: inline-block;padding: 3px 8px;margi…...

MQ入门(一):同步调用和异步调用--RabbitMQ基础入门

目录 1.初识MQ 1.1.同步调用 1.2.异步调用 1.3.技术选型 2.RabbitMQ 2.1.安装部署 2.2.RabbitMQ基本架构 2.3.收发消息 2.3.1.交换机 2.3.2.队列 2.3.3.绑定关系 2.3.4.发送消息 2.4.数据隔离 2.4.1.用户管理 2.4.2.virtual host 1.初识MQ 微服务一旦拆分&…...

由于安全风险,安全领导者考虑禁止人工智能编码

安全团队与开发团队之间的紧张关系 83% 的安全领导者表示&#xff0c;他们的开发人员目前使用人工智能来生成代码&#xff0c;57% 的人表示这已成为一种常见做法。 然而&#xff0c;72% 的人认为他们别无选择&#xff0c;只能允许开发人员使用人工智能来保持竞争力&#xff0…...

地图相关的系统软件及插件

1 ArcGis ArcGis For Javascript中文网站 首页 | ArcGis中文网 ArcGis For Javascript英文网站 ArcGIS是一款由Esri公司开发的地理信息系统软件&#xff0c;它提供了丰富的地图数据和分析工具&#xff0c;可以帮助用户进行各种空间分析和决策。 2 leaflet leaflet中文网站…...

Elasticsearch如何排序,分页以及高亮查询

目录 一、排序 二、分页查询 三、高亮查询 一、排序 ES中默认使用相关度分数实现排序&#xff0c;可以通过搜索语法定制化排序。 GET /索引/_search { "query": 搜索条件,"sort": [{"字段1":{"order":"asc"} },{ "字…...

Transformer预测 | 基于Transformer心率时间序列预测(tensorflow)

效果一览 基本介绍 Transformer预测 | 基于Transformer心率时间序列预测(tensorflow) 程序设计 import pandas as pd from pandas.plotting import lag_plot from statsmodels.graphics...

科研绘图系列:R语言误差连线图(errobar linechart)

文章目录 介绍加载R包导入数据数据预处理画图系统信息介绍 误差连线图是一种在数据可视化中常用的图表,它通过在数据点处添加线段(误差线)来表示数据的变异性或不确定性。这些误差线可以基于不同的统计度量,如标准差(Standard Deviation)、标准误差(Standard Error)或…...

智能BI项目第五期

本期主要内容 系统问题分析异步化业务流程分析线程池讲解&#xff08;入门 原理 实战&#xff09;系统异步化改造开发 1.系统问题分析 当系统面临大量用户请求时&#xff0c;我们后端的 AI 处理能力有限&#xff0c;例如服务器的内存、CPU、网络带宽等资源有限&#xff0c…...

Android-UI设计

控件 控件是用户与应用交互的元素。常见的控件包括&#xff1a; 按钮 (Button)&#xff1a;用于执行动作。文本框 (EditText)&#xff1a;让用户输入文本。复选框 (CheckBox)&#xff1a;允许用户选择或取消选择某个选项。单选按钮 (RadioButton)&#xff1a;用于在多个选项中…...

docker desktop windows stop

服务docker改为启动 cmd下查看docker版本 {"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"registry-mirrors": ["https://hub.atomgit.com/"]…...

Qt容器类控件——QGroupBox和QTabWidget

文章目录 QGroupBox又来点餐QTabWidget使用演示 QGroupBox 容器类控件即里面可以容纳其他的控件 QGroupBox叫做分组框&#xff0c;可以把其他控件放在里面作为一组 QGroupBox的存在&#xff0c;只是为了让界面更好看一点&#xff0c;并不实现实质性的功能。 当界面较复杂的时候…...

qt-creator-10.0.2之后版本的jom.exe构建和编译速度慢下来了

1、Qt的IDE一直在升级&#xff0c;qt-creator的新版本下载地址 https://download.qt.io/official_releases/qtcreator/ 2、本人一直用的是qt-creator-10.0.2版本&#xff0c;官网历史仓库可以下载安装包qt-creator-opensource-windows-x86_64-10.0.2.exe https://download.qt…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档&#xff1a;Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后&#xff0c;会在本地和远程创建数据库&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库&#xff1a; 现在&#xff0c;您的Cloudfla…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...