9.2 Linux_I/O_标准I/O相关函数

news2024/9/30 20:09:32

打开与关闭

文件打开就是判断这个文件资源可不可以被占用,如果可以,就能够打开成功,否则打开失败

文件关闭就是释放文件资源

1、打开文件

1.1 函数声明

FILE *fopen(const char *pathname, const char *mode);

返回值:出错返回NULL,成功返回流指针

pathname:文件的路径。如果是当前目录下的文件,只写文件名即可。其他目录需要写绝对路径

mode:打开的模式

模式含义适用情况
r     rb只读,文件必须存在只想查看,不想修改文件
w    wb只写,先清空原文件,写时覆盖原文件,没有则创建只写一次的情况
a     ab只写,追加原文件,没有则创建需要多次写入的情况
r+    r+b读写,写时覆盖原文件,文件必须存在可使用光标随意位置写入
w+  w+b读写,先清空原文件,写时覆盖原文件,没有则创建可使用光标随意位置写入
a+   a+b读写,写时追加原文件,没有则创建不可指定光标位置

注意:打开文件后,必须判断返回值是否有效。只有当返回值有效时,才能对文件进行操作。

注意:打开文件后,光标指向文件的开头 

1.2 基本使用方法

使用步骤:

  1. 定义一个流指针fp
  2. 调用fopen打开文件
  3. 判断返回值有效性

具体代码实现如下:

#include <stdio.h>

int main(){
	//1.定义一个流指针
	FILE* fp = NULL;
	//2.打开文件
	fp = fopen("./test.c","r");//以只读方式打开文件./test.c
	//3.判断返回值有效性
	if(fp == NULL){
		perror("fopen");//打印错误信息
		return -1;
	}
	printf("open success\n");
    fclose(fp);
	return 0;
}

代码执行结果如下: 

2、关闭文件

2.1 函数声明如下:

int fclose(FILE *stream);

返回值:成功返回0;失败返回EOF(-1),并设置错误号errno

stream:指向要关闭的文件的流指针

2.2 关闭文件函数所做的事情:

流关闭时,自动刷新缓冲区中的数据并释放缓冲区,这意味着将之前对文件的写入内容会真正的写入到磁盘中,并释放内存开辟的缓冲区。

如果不调用fclose但是程序结束,也会有fclose的同样的效果。

3、打印错误信息

3.1 函数声明如下:

//先输出字符串s,再输出错误号对应的信息
void perror(const char *s);

//根据错误号errnum,返回对应的错误信息
char *strerror(int errnum);

对于strerror的参数errnum,固定填入errno即可。这需要先包含#include <errno.h>

3.2 基本使用方法

具体代码实现如下: 

#include <stdio.h>
#include <string.h>
#include <errno.h>

int main(){
	FILE* fp = NULL;
	fp = fopen("./alksjdla","r");
	if(fp == NULL){
		perror("perror");                        //perror 打印错误
		printf("strerror:%s\n",strerror(errno)); //strerror 打印错误
		return -1;
	}
	printf("open success\n");
	return 0;
}

代码执行结果如下: 

读取与写入

输入输出两大问题:

  • 光标问题:

读取与写入操作都是从光标位置开始执行,执行完成后都会对光标位置进行修改。因此读写操作首先要考虑的时当前光标位置,以及执行之后光标移动的结果

  • 缓冲区问题:

输出(写入)操作,都是行缓冲模式,如果输出结果没有'\n',那么需要在输出之后使用fflush手动刷新缓冲区,将缓冲区内容写入到文件中。

1、按字符输入输出

1.1 按字符输入函数声明如下:

//从文件中读取一个字符
int fgetc(FILE *stream);

//这是fgetc的宏,不是函数
int getc(FILE *stream);

//只能读取标准输入的一个字符,等同于fgetc(stdin)
int getchar(void);

返回值:成功返回字符,失败或读到文件末尾返回EOF(-1) 

stream:指向要读取的文件的流指针

注意:从文件的当前光标位置读取一个字符,读取后光标偏移一个字符 

1.2 按字符输出函数声明如下:

//向文件中写入一个字符
//同样,fputc只是将数据存入缓冲区,当遇到\n时才真正的存入到文件中
int fputc(int c, FILE *stream);

//这是fputc的宏,不是函数
int putc(int c, FILE *stream);

//只能向标准输出上输出一个字符,等同于fputc(stdout)
//同样,putchar只是将数据存入缓冲区,当遇到\n时才打印到屏幕
int putchar(int c);

返回值:成功返回写入的字符,失败返回EOF

c:要写入的字符

stream:指向要写入的文件的流指针

注意:将光标移动(与模式有关),在光标位置写入一个字符,写入后光标偏移一个字符  

1.3 基本使用方法

具体代码实现如下:  

#include <stdio.h>
#include <string.h>
#include <errno.h>

int main(){
	FILE* fp = NULL;
	//1.打开文件
	fp = fopen("./file","a+");//以追加方式,可读可写打开文件
	if(fp == NULL){
		perror("fopen");
		return -1;
	}
	//读取文件
	printf("1:输出%%c %c\n",fgetc(fp));//光标指向0,读取后偏移一个字符
	printf("2:输出%%c %c\n",fgetc(fp));//光标指向1,读取后偏移一个字符
	//写入文件
	fputc('x',fp);//先将光标指向末尾,再向光标位置写入一个字符,写后光标偏移一个字符
	//读取文件
	printf("3:输出%%d %d\n",fgetc(fp));//光标指向末尾,没有数据
	//关闭文件
	fclose(fp);
	return 0;
}

 代码执行结果如下: 

2、按行输入输出

2.1 按行输入

2.1.1 按行输入函数声明如下:

//从文件中读取数据,存放在s中
char *fgets(char *s, int size, FILE *stream);

//从标准输入上读取数据,存放在s中
char *gets(char *s);  //不使用,因为没有指定读取数据的大小,容易造成缓冲区溢出

返回值:成功返回缓冲区首地址,失败返回NULL

s:将读取的内容放置的缓冲区地址

size:每次读取的字符的个数,'\0'同样算一个字符。size>输入字符个数时,会将回车也存入s

          比如size = 3,输入abcd,最终缓冲区存放的数据为ab'\0',而不是abc

          比如size = 10,输入abcd,最终缓冲区存放的数据为abcd '\n' '\0'

stream:从哪一个文件读取数据

注意:fgets执行后,光标会进行移动

2.1.2 size验证代码如下:

  • 当size>字符个数时,会将\n存入缓冲区 

  • 当size<字符个数时,'\0'也算一个字符

2.1.3  按行输入的原理验证

按行输入函数 fgets()的原理就是读到回车就算一行,假如这一行有n个字符,如果n<size,那么读取到的是完整的一行数据;如果n>=size,那么本次只读取size-1个字符,其余字符下次调用fgets()会接着读取。

具体代码如下:

#include <stdio.h>
#include <string.h>
#include <errno.h>

int main(){
	char buf[100];
	FILE* fp = NULL;
	//打开文件
	if((fp = fopen("./file","r")) == NULL){
		perror("fopen");
		return -1;
	}
	//读取文件
	fgets(buf,5,fp);//从fp文件上一次最多读取5个字符
	printf("1:%s\n",buf);
	fgets(buf,5,fp);//从fp文件上一次最多读取5个字符
	printf("2:%s\n",buf);
	fgets(buf,5,fp);//从fp文件上一次最多读取5个字符
	printf("3:%s\n",buf);
	
	//关闭文件
	fclose(fp);
	return 0;
}

代码执行结果如下: 

2.1.4 应用:获取文件的行号 

具体代码实现如下:

int main(){

	FILE* fp = NULL;
	int i = 0;
	char buf[3] = {0};//数组大小可随意填,后面有判断是否换行的处理,不需要一次读完一行

	if((fp = fopen("./file","a+")) == NULL){//以追加方式,可读可写
		perror("fopen");
		return -1;
	}
    //计算文件有多少行
	while(fgets(buf,sizeof(buf),fp) != NULL){
		if(buf[strlen(buf)-1] == '\n'){//判断倒数第二个字符是否为换行,是换行代表这行读完
			i++;
		}
	}
	fclose(fp);
	return 0;
}

2.2 按行输出 

2.2.1 按行输出函数声明如下:

//将字符串数据s输出到文件中
int fputs(const char *s, FILE *stream);

//将字符串数据s输出到标准输出上
int puts(const char *s);

返回值:成功返回非负数,失败返回EOF

s:要输出的字符串

stream:指向要输出到的文件位置

注意:puts会自动添加'\n',fputs不会自动添加'\n'

注意:fputs执行后,光标会进行移动

2.2.2 基本使用方法

具体代码实现如下:

#include <stdio.h>
#include <string.h>
#include <errno.h>

int main(){
	FILE* fp = NULL;
	//1.打开文件
	fp = fopen("./file","a+");//以追加方式,可读可写打开文件
	if(fp == NULL){
		perror("fopen");
		return -1;
	}

    //这里的fputs能写进去是因为文件关闭了,应该之后用fflush刷新一下
	fputs("fputs",fp);//没有换行符'\n'
	puts("puts");

	//关闭文件
	fclose(fp);
	return 0;
}

代码执行结果如下:

3、按对象(二进制)输入输出

3.1 按对象输入输出函数声明:

//按对象输入,从stream中读取数据存入到ptr中
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
//按对象输出,将ptr中的数据写入到stream中
size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);

返回值:成功返回读写对象的个数,出错返回EOF

ptr:缓冲区指针,用于存放读的数据或要写的数据

size:每个内容的大小(块大小) 单位:字节

nmemb:读写多少个内容

stream:进行操作的文件流指针

注意:这两个函数既可以读写文本文件,也可以读写二进制文件(数据文件)

注意:这两个函数执行后,光标都会进行移动 

3.2 读写文本文件实验

具体代码实现如下:

#include <stdio.h>
#include <string.h>
#include <errno.h>

int main(){
	FILE* fp = NULL;
	char buf[100] = {0};
	//1.打开文件
	fp = fopen("./file","a+");//以追加方式,可读可写打开文件
	if(fp == NULL){
		perror("fopen");
		return -1;
	}

	fread(buf,sizeof(char),5,fp);//从fp指向的文件中读取5*sizeof(char)个字节,存放到buf中
	printf("read:%s\n",buf);

	//关闭文件
	fclose(fp);
	return 0;
}

代码运行结果如下:

3.3 读写二进制文件实验

具体代码实现如下:

#include <stdio.h>
#include <string.h>
#include <errno.h>

struct test{
	char name[10];
	int age;
};

int main(){
	FILE* fp = NULL;
	struct test tWrite = {"rsy",20};
	struct test tRead;
	//打开文件
	fp = fopen("./file","a+");//以追加方式,可读可写打开文件
	if(fp == NULL){
		perror("fopen");
		return -1;
	}
    //从fp指向的文件中写入1*sizeof(struct test)个字节
	fwrite(&tWrite,sizeof(struct test),1,fp);
	//重置光标位置
	fclose(fp);
	if((fp = fopen("./file","a+")) == NULL){
		perror("fopen");
		return -1;
	}
    //从fp指向的文件中读取1*sizeof(struct test)个字节
	fread(&tRead,sizeof(struct test),1,fp);
	printf("name = %s,age = %d\n",tRead.name,tRead.age);
	//关闭文件
	fclose(fp);
	return 0;
}

代码运行结果如下:

流刷新定位

1、流刷新

流刷新的作用,就是手动的让缓冲区的内容进行输出,丢弃输入缓冲区的内容。

1.1 刷新流的函数声明如下:

int fflush(FILE *stream);

返回值:成功返回0,失败返回EOF

stream:指向文件的流

如果输出到屏幕,使用fflush(stdout)即可。

1.2 刷新流实验

#include <stdio.h>
#include <string.h>
#include <errno.h>

struct test{
	char name[10];
	int age;
};

int main(){
	FILE* fp = NULL;
	struct test tWrite = {"rsy",20};
	struct test tRead;
	//打开文件
	fp = fopen("./file","a+");//以追加方式,可读可写打开文件
	if(fp == NULL){
		perror("fopen");
		return -1;
	}
	//写入数据
	fwrite("1234",sizeof("1234"),1,fp);
	fflush(fp);//刷新流,这里的1234没有'\n',但刷新后可以将1234写入文件中
	while(1);

	//关闭文件
	fclose(fp);
	return 0;
}

2、流定位

流定位就是可以手动改变流指针(光标)的位置

注意:这下面3个函数只适用2GB以下的文件

2.1 流定位的函数声明如下:

//查询流指针位置
long ftell(FILE *stream);

返回值:成功返回流当前的读写位置,失败返回EOF

stream:要进行操作的文件流指针

注意:刚打开文件时,流指针的值为0,流指针的单位为字节。

//将流指针定位到开头
void rewind(FILE *stream);
//定位一个流
int fseek(FILE *stream, long offset, int whence);

返回值:成功返回0,失败返回 EOF

stream:要进行操作的文件流指针

offset:偏移量,正数代表向文件尾偏移,负数代表向文件头偏移,0代表不偏移

whence:偏移位置,从哪里开始偏移

参数含义
SEEK_SET从文件头开始偏移
SEEK_CUR从文件流指针当前位置开始偏移
SEEK_END从文件尾开始偏移

注意:当fopen时,模式为a时,fseek不起作用

2.2 流定位实验

具体代码实现如下:

#include <stdio.h>
#include <string.h>
#include <errno.h>

int main(){
	FILE* fp = NULL;
	char read_buf[100] = {0};
	//打开文件
	fp = fopen("./file","w+");//打开时清空,以覆盖方式,可读可写打开文件
	if(fp == NULL){
		perror("fopen");
		return -1;
	}
	//1.打开后,文件流指针为0	
	printf("after fopen,point = %ld\n",ftell(fp));
	//2.写入数据后,文件流指针偏移n个字节
	fwrite("12345",strlen("12345"),1,fp);
	fflush(fp);
	printf("after write 12345,point = %ld\n",ftell(fp));
	//3.写完后读取,需要将流指针重置位置
	rewind(fp);	
	fread(read_buf,100,1,fp);
	printf("now file data is %s\n",read_buf);
	memset(read_buf,0,sizeof(read_buf));
	//4.将流指针指向头,流指针变为0
	rewind(fp);
	printf("after rewind,point = %ld\n",ftell(fp));
	//写入是在流指针位置开始写入,这会覆盖数据
	fwrite("ab",strlen("ab"),1,fp);
	fflush(fp);
	rewind(fp);	
	fread(read_buf,100,1,fp);
	printf("now file data is %s\n",read_buf);	
	memset(read_buf,0,sizeof(read_buf));
	//5.fseek测试
	//将流指针指向ab345的b
	fseek(fp,1,SEEK_SET);
	fread(read_buf,100,1,fp);//读取之后流指针指向了5后面
	printf("after fseek->b,read data is %s\n",read_buf);
	memset(read_buf,0,sizeof(read_buf));
	fread(read_buf,100,1,fp);
	//printf("again read,read data is %s\n",read_buf);
	//memset(read_buf,0,sizeof(read_buf));
	//将流指针指向ab345的5
	fseek(fp,-1,SEEK_CUR);
	fread(read_buf,100,1,fp);
	printf("after fseek->5,read data is %s\n",read_buf);
	memset(read_buf,0,sizeof(read_buf));

	//关闭文件
	fclose(fp);
	return 0;
}

代码运行结果如下:

格式化输入输出

1、格式化输出

1.1 格式化输出的函数声明如下:

//将内容输出到屏幕
int printf(const char *format, ...);

//将内容输出到文件
int fprintf(FILE *stream, const char *format, ...);

//将内容输出到指定字符数组
int sprintf(char *str, const char *format, ...);

返回值:成功返回输出字符的个数,失败返回EOF

stream:要进行操作的文件流指针

str:要进行操作的字符数组指针

注意:fprintf也是从当前流指针位置开始写入

1.2 格式化输出实验

具体代码实现如下:

#include <stdio.h>
#include <string.h>
#include <errno.h>

int main(){
	FILE* fp = NULL;
	char buf[100] = {0};	
	//打开文件
	fp = fopen("./file","w+");//打开时清空,以覆盖方式,可读可写打开文件
	if(fp == NULL){
		perror("fopen");
		return -1;
	}
    //printf
	printf("printf:%s\n","this is printf");//将字符串打印到屏幕
	//sprintf
	sprintf(buf,"%s","this is sprintf");//将字符串写进buf中
	printf("sprintf:%s\n",buf);
	memset(buf,0,sizeof(buf));
    //fprintf
	fprintf(fp,"%s","this is fprintf");//将字符串写进fp指向的文件中
	fflush(fp);
	rewind(fp);
	fread(buf,sizeof(char),100,fp);
	printf("fprintf:%s\n",buf);
	memset(buf,0,sizeof(buf));
	//关闭文件
	fclose(fp);
	return 0;
}

代码运行结果如下:

2、格式化输入

2.1 格式化输入的函数声明如下:

//从标准输入上获取数据
int scanf(const char *format, ...);

//从文件中获取数据
int fscanf(FILE *stream, const char *format, ...);

//从字符串中获取数据
int sscanf(const char *str, const char *format, ...);

返回值:成功返回读取的数据个数,失败返回EOF

stream:从哪个文件获取数据

str:从哪个字符数组获取数据

注意:fscanf与sscanf会将存储空间先清空,再存入读取的值

注意:fscanf也是从当前流指针位置开始读取

sscanf这种格式化输入应用见b站视频,链接如下:

4.3.2蓝桥杯嵌入式组_串口接收数据解析(不定长)_哔哩哔哩_bilibili

2.2 格式化输入实验

具体代码实现如下:

#include <stdio.h>
#include <string.h>
#include <errno.h>

int main(){
	FILE* fp = NULL;
	char buf[100] = {0};	
	//打开文件
	fp = fopen("./file","w+");//打开时清空,以覆盖方式,可读可写打开文件
	if(fp == NULL){
		perror("fopen");
		return -1;
	}
    //scanf
	scanf("%s",buf);
	printf("scanf:%s\n",buf);
	memset(buf,0,sizeof(buf));
    //sscanf
	sscanf("abcdef:123:xxx","%[^:]",buf);
	printf("sscanf:%s\n",buf);
	memset(buf,0,sizeof(buf));
    //fscanf
	fwrite("this is fscanf\n",strlen("this is fscanf\n"),1,fp);
	rewind(fp);
	fscanf(fp,"%s",buf);
	printf("fscanf:%s\n",buf);

	//关闭文件
	fclose(fp);
	return 0;
}

代码执行结果如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2180590.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

永不失联!遨游双卫星三防手机成为高效应急关键所在

今年9月被戏称为“台风月”&#xff0c;台风“摩羯”、“贝碧嘉”以及热带气旋“普拉桑”接连来袭&#xff0c;极端天气不仅导致了电力中断、道路损毁&#xff0c;更使得传统的通信网络遭受重创&#xff0c;给应急通信保障工作带来了极大的压力。面对“三断”的实战难题&#x…

铰链+屏幕齐发力,告诉你 Mate XT 是如何让折痕变得“无存在感”

“折痕”是折叠手机永恒的话题&#xff0c;每一款折叠屏手机产品的问世&#xff0c;都逃不过对折痕的关注和讨论。 为什么会存在折痕&#xff1f; 材料在弯折的状态下会受到力的作用&#xff0c;在内部产生“压缩”的应力和“拉伸”的应力&#xff0c;这些应力集中在弯折的区…

pytorch线性/非线性回归拟合

一、线性回归 1. 导入依赖库 import numpy as np import matplotlib.pyplot as plt import torch from torch import nn, optim from torch.autograd import Variable numpy&#xff1a;用来构建数据matplotlib.pyplot&#xff1a; 将构建好的数据可视化torch.nn&#xff1a…

《向量数据库指南》——Fivetran 的 Partner SDK:构建自定义连接器和目标

哈哈,说到 Fivetran 的 Partner SDK,这可真是个好东西啊!作为向量数据库领域的“老司机”,我今天就来给大家详细讲讲这个 SDK 的厉害之处,以及如何用它来构建自定义连接器和目标,实现与 Fivetran 自动化数据移动平台的无缝集成。 一、Fivetran Partner SDK:开启自定义连…

二叉树深搜专题篇

目录 计算布尔二叉树的值 求根节点到叶节点数字之和 二叉树剪枝 验证二叉搜索树 二叉搜索树中第K小的元素 二叉树的所有路径 计算布尔二叉树的值 题目 思路 这道题其实是比较简单的&#xff0c;对二叉树来一次后序遍历即可&#xff0c;当遇到叶子结点直接返回叶子节点中…

干部画像系统怎么实现人岗智能匹配的?

人岗匹配的核心在于实现“岗得其人”和“人适其岗”&#xff0c;即根据不同人的个体特征将不同的人安排在各自最合适的岗位上&#xff0c;达到人尽其才的目标。干部画像系统作为一种辅助领导智慧识才的工具&#xff0c;通过集成多种技术手段和分析方法&#xff0c;对干部的定性…

【代码实现】torch实现F.pixel_shuffle和F.pixel_unshuffle

原理 pixel_shuffle 和 pixel_unshuffle 常用于神经网络减少特征图尺寸以减少计算量&#xff0c;由于有些硬件不支持这两个算子&#xff0c;可以根据原理使用torch实现。 代码实现 import torch.nn.functional as F import torch def pixelshuffle_inv(tensor, scale2):N, c…

C++详解vector

目录 构造和拷贝构造 赋值运算符重载&#xff1a; vector的编辑函数&#xff1a; assign函数&#xff1a; push_back和pop_back函数&#xff1a; insert函数&#xff1a; erase函数&#xff1a; swap函数&#xff1a; clear函数&#xff1a; begin函数&#xff1a; e…

【以图搜图代码实现2】--faiss工具实现犬类以图搜图

第一篇&#xff1a;【以图搜图代码实现】–犬类以图搜图示例 使用保存成h5文件&#xff0c;使用向量积来度量相似性&#xff0c;实现了以图搜图&#xff0c;说明了可以优化的点。 第二篇&#xff1a;【使用resnet18训练自己的数据集】 准对模型问题进行了优化&#xff0c;取得了…

汽修行业的知识库搭建:赋能在线教育与知识付费

随着汽修行业的蓬勃发展&#xff0c;其业务范围和技术要求日益多元化。为了应对这一趋势&#xff0c;许多汽修公司开始探索线上教育模式&#xff0c;通过开设汽修知识课程&#xff0c;实现知识的有偿分享与传播。这一转变不仅拓宽了企业的盈利渠道&#xff0c;也为广大汽修爱好…

深度学习之贝叶斯分类器

贝叶斯分类器 1 图解极大似然估计 极大似然估计的原理&#xff0c;用一张图片来说明&#xff0c;如下图所示&#xff1a; ​ 例&#xff1a;有两个外形完全相同的箱子&#xff0c;1号箱有99只白球&#xff0c;1只黑球&#xff1b;2号箱有1只白球&#xff0c;99只黑球。在一次…

【Spark 实战】基于spark3.4.2+iceberg1.6.1搭建本地调试环境

基于spark3.4.2iceberg1.6.1搭建本地调试环境 文章目录 基于spark3.4.2iceberg1.6.1搭建本地调试环境环境准备使用maven构建sparksql编辑SparkSQL简单任务附录A iceberg术语参考 环境准备 IntelliJ IDEA 2024.1.2 (Ultimate Edition)JDK 1.8Spark 3.4.2Iceberg 1.6.1 使用mave…

C++----类和对象(一)

一.类的定义 1.类定义的格式 • class为定义类的关键字&#xff0c;ST为类的名字&#xff0c;{}中为类的主体&#xff0c;注意类定义结束时后面分号不能省 略。类体中内容称为类的成员&#xff1a;类中的变量称为类的属性或成员变量; 类中的函数称为类的方法或 者成员函数。 …

NAND Flash虚拟层设计概述

NAND Flash虚拟层的建立需要对NAND Flash虚拟层进行初始化&#xff0c;根据相应的NAND Flash的物理结构参数建立逻辑结构&#xff0c;并建立索引表来管理逻辑虚拟层与物理虚拟层之间的联系&#xff1b;而在NAND Flash虚拟层运行过程中需要对NAND Flash虚拟层进行相应的垃圾回收…

【AI驱动TDSQL-C Serverless数据库技术实战】 AI电商数据分析系统——探索Text2SQL下AI驱动代码进行实际业务

目录 一、Text2SQL简介二、基于TDSQL-C Serverless的Text2SQL实战2.1、程序流程图2.2、实践流程2.2.1、配置TDSQL-C2.2.2、部署LLAMA模型2.2.3、本地依赖安装2.2.4、应用构建 2.3、运行效果 三、Text2SQL下的AI驱动 Text2SQL 是一种将自然语言查询转换为 SQL 查询的技术&#x…

NVIDIA H200 Tensor Core GPU

增强 AI 和 HPC 工作负载。 文章目录 前言一、通过更大、更快的内存实现更高的性能二、通过高性能 LLM三、增强高性能计算四、Reduce Energy and TCO 降低能耗和 TCO五、通过 H200 NVL 为主流企业服务器释放 AI 加速前言 The GPU for Generative AI and HPC 用于生成式 AI 和 …

香港科技大学新作:速度场如何在复杂城市场景规划中大显身手

导读&#xff1a; 本篇文章提出了一种局部地图表示方法&#xff08;即速度场&#xff09;来解决无法为所有场景设计通用规划规则的问题。此外&#xff0c;本文开发了一种高效的迭代轨迹优化器&#xff0c;其与速度场无缝兼容&#xff0c;实现了训练和推理过程。实验结果表明&am…

Linux操作系统中Redis

1、什么是Redis Redis&#xff08;Remote Dictionary Server &#xff09;&#xff0c;即远程字典服务&#xff0c;是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并提供多种语言的API。 可以理解成一个大容量的map。…

《向量数据库指南》——Milvus 和 Fivetran 如何为 AI 构建基础

哈哈,说起 Milvus 和 Fivetran 如何为 AI 构建基础,这可真是个有意思的话题!来,让我这个向量数据库领域的“老司机”给你详细讲解一番,保证让你听得津津有味,还能学到不少干货! Milvus 和 Fivetran:AI 搜索解决方案的黄金搭档 在当今这个数据爆炸的时代,AI 已经成为…

《软件工程概论》作业一:新冠疫情下软件产品设计(小区电梯实体按钮的软件替代方案)

课程说明&#xff1a;《软件工程概论》为浙江科技学院2018级软件工程专业在大二下学期开设的必修课。课程使用《软件工程导论&#xff08;第6版&#xff09;》&#xff08;张海藩等编著&#xff0c;清华大学出版社&#xff09;作为教材。以《软件设计文档国家标准GBT8567-2006》…