C语言文件操作,看这一篇就够了!

news2026/3/21 12:34:39
一、文件的打开1.为什么使用文件我们前面学习结构体时写了通讯录的程序当通讯录运行起来的时候可以给通讯录中增加、删除数据此时数据是存放在内存中当程序退出的时候通讯录中的数据自然就不存在了等下次运行通讯录程序的时候数据又得重新录入如果使用这样的通讯录就很难受。我们在想既然是通讯录就应该把信息记录下来只有我们自己选择删除数据的时候数据才不复存在。这就涉及到了数据持久化的问题我们一般数据持久化的方法有把数据存放在磁盘文件、存放到数据库等方式。使用文件我们可以将数据直接存放在电脑的硬盘上做到了数据的持久化。2.什么是文件磁盘上的文件是文件。但是在程序设计中我们一般谈的文件有两种程序文件、数据文件从文件功能的角度来分类的。①程序文件包括源程序文件后缀为.c目标文件windows环境后缀为.obj何执行程序windows环境后缀为.exe。②数据文件文件的内容不一定是程序而是程序运行时读写的数据比如程序运行需要从中读取数据的文件或者输出内容的文件。本章讨论的是数据文件。③文件名一个文件要有一个唯一的文件标识以便用户识别和引用。文件名包含3部分文件路径文件名主干文件后缀例如:c:\code\test.txtc:\code\ test txt为了方便起见文件标识常被称为文件名。3.文件的打开和关闭struct _iobuf { char *_ptr; int _cnt; char *_base; int _flag; int _file; int _charbuf; int _bufsiz; char *_tmpfname; }; typedef struct _iobuf FILE;①文件指针缓冲文件系统中关键的概念是”文件类型指针”简称”文件指针”。每个被使用的文件都在内存中开辟了一个相应的文件信息区用来存放文件的相关信息如文件的名字文件状态及文件当前的位置等。这些信息是保存在一个结构体变量中的。该结构体类型是有系统声明的取名FILE.例如VS2013编译环境提供的stdio.h头文件中有以下的文件类型申明不同的C编译器的FILE类型包含的内容不完全相同但是大同小异。每当打开一个文件的时候系统会根据文件的情况自动创建一个FILE结构的变量并填充其中的信息使用者不必关心细节。一般都是通过一个FILE的指针来维护这个FILE结构的变量这样使用起来更加方便。下面我们可以创建一个FILE*的指针变量FILE*pf;//文件指针变量定义pf是一个指向FILE类型数据的指针变量。可以使pf指向某个文件的文件信息区是一个结构体变量。通过该文件信息区中的信息就能够访问该文件。也就是说通过文件指针变量能够找到与它关联的文件。比如②文件的打开和关闭文件在读写之前应该先打开文件在使用结束之后应该关闭文件。在编写程序的时候在打开文件的同时都会返回一个FILE*的指针变量指向该文件也相当于建立了指针和文件的关系。ANSIC规定使用fopen函数来打开文件fclose来关闭文件。1)格式FILE* open (const char* filename,//文件名称 const char* mode) //文件的打开模式读、写……文件的打开模式r读read打开文件进行输入操作。该文件必须存在。w写入write创建一个空文件用于输出操作。如果同名文件已经存在则其内容被丢弃并且该文件被视为一个新的空文件。a附加append在文件末尾打开输出文件。输出操作总是将数据写入文件末尾文件将其扩展。忽略重新定位操作fseek、fsetpos、rewind。如果文件不存在则创建文件不存在。r读/更新read/update打开一个文件进行更新既可输入也可输出。该文件必须存在。w写入/更新write/update创建一个空文件并打开它进行更新既用于输入也用于输出。如果有一个文件同名已存在其内容将被丢弃并且该文件将被视为一个新的空文件。a附加/更新append/update打开一个文件进行更新既可输入也可输出所有输出操作都写入数据在文件的末尾。重新定位操作fseek、fsetpos、rewind会影响下一个输入操作但输出操作会将位置移动回文件末尾。如果文件不存在则会创建该文件。2代码#includestdio.h #includestring.h #includeerrno.h int main() { //1.打开文件 //①相对路径 //FILE* pffopen(test.txt,w); //②如果想打开桌面上的文件 //1要给出绝对路径 //2并且多加一个斜杠防止转义字符 //文件地址C:\Users\abc\Desktop\新建 RTF 文件.rtf FILE* pffopen(C:\\Users\\abc\\Desktop\\新建 RTF 文件.rtf,r); if(pfNULL) { //如果打开失败打印错误信息 printf(%s\n,strerror(errno)); return 1; } //2.读文件 //3.关闭文件 fclose(pf); pfNULL; return 0; }4、文件的顺序读写①写文件int fputc ( int character, FILE * stream ); //字符ASCII值是整数#includestdio.h #includestring.h #includeerrno.h int main() { //打开文件 FILE* pffopen(D:\\C code\\test.txt,w); //注意是w!!! //写文件 if(pfNULL) { printf(%s\n,strerror(errno)); return 1; } //写文件 char i0; for(ia;iz;i) fputc(i,pf); fputc(\n,pf); fputc(y,pf); //关闭文件 fclose(pf); pfNULL; return 0; }②读文件int fgetc ( FILE * stream );#includestdio.h #includestring.h #includeerrno.h int main() { //打开文件 FILE* pffopen(D:\\C code\\test.txt,r); //注意是r!!! if(pfNULL) { printf(%s\n,strerror(errno)); return 1; } //读文件 //1.单个读取 int ch0; chfgetc(pf); printf(%c\n,ch); //2.读取全部 while((chfgetc(pf))!EOF) printf(%c ,ch); //关闭文件 fclose(pf); pfNULL; return 0; }③写一行int fputs ( const char * str, FILE * stream );#includestdio.h #includestring.h #includeerrno.h int main() { //打开文件 FILE* pffopen(D:\\C code\\test.txt,w); if(pfNULL) { printf(%s\n,strerror(errno)); return 1; } //写一行 char ch[]Hello,world!; fputs(ch,pf); //关闭文件 fclose(pf); pfNULL; return 0; }④读一行char * fgets ( char * str, int num,FILE * stream );str指向读取的字符串所复制的字符数组的指针。num复制到 str 的最大字符数包括终止空字符。stream指向标识输入流的 FILE 对象的指针。stdin 可以用作从标准输入读取的参数。#includestdio.h #includestring.h #includeerrno.h int main() { //打开文件 FILE* pffopen(D:\\C code\\test.txt,r); if(pfNULL) { printf(%s\n,strerror(errno)); return 1; } char arr[20]; fgets(arr,5,pf); printf(%s,arr); //hell //最多读5个真正读到4个 //因为还会在空间里放\0 //关闭文件 fclose(pf); pfNULL; return 0; }//printf(%s\n,strerror(errno)); //等价于 perror(fopen);⑤fprintfint fprintf ( FILE * stream, const char * format, ... );#includestdio.h #includestring.h #includeerrno.h struct Student { char name[20]; int age; float score; }; int main() { FILE* pffopen(D:\\C code\\test.txt,w); if(pfNULL) { perror(fopen); return 1; } struct Student stu{zhangsan,18,90.5f}; fprintf(pf,%s %d %f,stu.name,stu.age,stu.score); fclose(pf); pfNULL; return 0; }⑥scanfint fscanf ( FILE * stream, const char * format, ... );#includestdio.h #includestring.h #includeerrno.h struct Student { char name[20]; int age; float score; }; int main() { FILE* pffopen(D:\\C code\\test.txt,r); if(pfNULL) { perror(fopen); return 1; } struct Student stu{0}; fscanf(pf,%s %d %f,stu.name,stu.age,stu.score); printf(%s %d %f,stu.name,stu.age,stu.score); fclose(pf); pfNULL; return 0; }1任何一个程序只要运行起来就会默认打开3个流FILE*stdin-标准输入流键盘FILE*stdout-标准输出流屏幕FILE*stderr-标准错误流屏幕2用fprintf的stdout可以打印到屏幕上struct Student stu{0}; fscanf(pf,%s %d %f,stu.name,stu.age,stu.score); fprintf(stdout,%s %d %f,stu.name,stu.age,stu.score);⑦fwrite以二进制的方式写size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );ptr:指向要写入的元素数组的指针转换为 const void*。size:每个要写入的元素的大小以字节为单位。size_t 是一种无符号整数类型。count:元素的数量每个元素的大小为 size 字节。size_t 是一种无符号整数类型。stream:指向指定输出流的 FILE 对象的指针。#includestdio.h #includestring.h #includeerrno.h struct Student { char name[20]; int age; float score; }; int main() { struct Student stu{zhangsan,18,50.3}; //以二进制的方式写 FILE* pffopen(D:\\C code\\test.txt,wb); if(pfNULL) { perror(fopen); return 1; } fwrite(stu,sizeof(struct Student),1,pf); fclose(pf); pfNULL; return 0; }⑧fread以二进制的方式读#includestdio.h #includestring.h #includeerrno.h struct Student { char name[20]; int age; float score; }; int main() { struct Student stu{0}; //以二进制的方式读 FILE* pffopen(D:\\C code\\test.txt,rb); if(pfNULL) { perror(fopen); return 1; } fread(stu,sizeof(struct Student),1,pf); printf(%s %d %f,stu.name,stu.age,stu.score); fclose(pf); pfNULL; return 0; }⑨区分scanf是针对标准输入的格式化输入语句prinf是针对标准输出的格式化输出语句fscanf是针对所有输入流的格式化输入语句fprintf是针对所有输出流的格式化输出语句sscanf从一个字符串中转化处一个格式化的数据sprintf是把一个格式化的数据转化成字符串序列化和反序列化#includestdio.h #includestring.h #includeerrno.h #includestdlib.h struct Student { char name[20]; int age; float score; }; int main() { struct Student stu{zhangsan,20,22.3f}; char buf[100]; //把stu中的格式化数据转化成字符串放到buf中 sprintf(buf,%s %d %f,stu.name,stu.age,stu.score); printf(%s\n,buf); struct Student tmp{0}; //从字符串buf中获取一个格式化的数据到tmp中 sscanf(buf,%s %d %f,tmp.name,tmp.age,tmp.score); printf(%s %d %f,tmp.name,tmp.age,tmp.score); return 0; }⑩通讯录优化#includestdio.h #includeassert.h #includestdlib.h #includestring.h #define MAX 100 #define DEFAULT_SZ 3 #define INC_SZ 2 struct PeoInfo//人的信息 { char name[20]; int age; char sex; char tel[12]; char add[20]; }; struct Contact//通讯录 { struct PeoInfo* data; int count; int capacity; }; void menu()//菜单 { printf(----------------------------------------\n); printf(----------- 0.exit ------------------\n); printf(----------- 1.add ------------------\n); printf(----------- 2.show ------------------\n); printf(----------- 3.del ------------------\n); printf(----------- 4.sort ------------------\n); printf(----------------------------------------\n); } void CheckCapacity(struct Contact* pc) { assert(pc); if (pc-count pc-capacity) { struct PeoInfo* ptr (struct PeoInfo*)realloc(pc-data, sizeof(struct PeoInfo) * (pc-capacity INC_SZ)); if (ptr NULL) { perror(CheckCapacity); return; } else { pc-data ptr; pc-capacity INC_SZ; printf(增容成功\n); } } } void LoadContact(struct Contact* pc) { FILE* pfRead fopen(My_通讯录.dat, rb); if (pfRead NULL) { perror(LoadContact); return; } struct PeoInfo tmp { 0 }; while (fread(tmp, sizeof(struct PeoInfo), 1, pfRead) 1) {//fread函数返回成功读取元素的个数 CheckCapacity(pc);//考虑要不要增容 pc-data[pc-count] tmp; pc-count; } fclose(pfRead); pfRead NULL; } int InitContact(struct Contact* pc)//初始化通讯录 { assert(pc); pc-count 0; pc-data (struct PeoInfo*)malloc(DEFAULT_SZ * sizeof(struct PeoInfo)); if (pc-data NULL) { perror(InitContact); return 1; } pc-capacity DEFAULT_SZ; LoadContact(pc);// return 0; } void AddContact(struct Contact* pc)//增加联系人 { assert(pc); CheckCapacity(pc); printf(请输入新增联系人的【姓名】\n); scanf(%s, pc-data[pc-count].name); printf(请输入新增联系人的【年龄】\n); scanf( %d, pc-data[pc-count].age); printf(请输入新增联系人的【性别】\n); scanf( %c, pc-data[pc-count].sex); printf(请输入新增联系人的【电话】\n); scanf( %s, pc-data[pc-count].tel); printf(请输入新增联系人的【地址】\n); scanf( %s, pc-data[pc-count].add); pc-count; printf(添加成功\n); } void ShowContact(struct Contact* pc) //展示通讯录 { assert(pc); int i 0; printf(%-5s: , 序号); printf(%-10s , 姓名); printf(%-5s , 性别); printf(%-15s , 电话); printf(%-15s , 地址); printf(\n); for (i 0;i pc-count;i) { printf(%-5d: , i); printf(%-10s , pc-data[i].name); printf(%-5c , pc-data[i].sex); printf(%-15s , pc-data[i].tel); printf(%-15s , pc-data[i].add); printf(\n); } } int find_by_name(struct Contact* pc) //通过名字查找是否在通讯录 { assert(pc); char nam[20]; scanf(%s, nam); int i 0; int ret -1; int cnt -1; for (i 0;i pc-count;i) { ret strcmp(nam, pc-data[i].name); cnt i; } if (ret 0) return cnt; return -1; } void DelContact(struct Contact* pc)//删除联系人 { assert(pc); if (pc-count 0) { printf(通讯录为空没有可以删除的联系人!\n); return; } int i 0; int is_del find_by_name(pc); if (is_del -1) { printf(未找到该联系人\n); return; } printf(请输入要删除联系人的【姓名】\n); for (i is_del;i pc-count;i) pc-data[i] pc-data[i 1]; pc-count--; } int cmp_by_name(const void* e1, const void* e2) //通过名字的字典序比较对通讯录成员进行比较 { assert(e1, e2); struct PeoInfo* a (struct PeoInfo*)e1; struct PeoInfo* b (struct PeoInfo*)e2; return strcmp(a-name, b-name); } void SortContact(struct Contact* pc)//排序通讯录 { assert(pc); qsort(pc-data, pc-count, sizeof(struct PeoInfo), cmp_by_name); printf(排序成功\n); } void SaveContact(struct Contact* pc) { assert(pc); FILE* pfWrite fopen(My_通讯录.dat, wb); if (pfWrite NULL) { perror(SaveContact); return; } int i 0; for(i0;ipc-count;i) fwrite(pc-data[i], sizeof(struct PeoInfo),1, pfWrite); fclose(pfWrite); pfWrite NULL; } void DestoryContact(struct Contact* pc) { free(pc-data); pc-data NULL; } enum Option//枚举选择 { //枚举时用逗号并非分号 EXIT, ADD, SHOW, DEL, SORT }; int main() { struct Contact con; InitContact(con); int i 0; int input 1; while (input) { menu(); scanf(%d, input); switch (input) { //记得写break case ADD: AddContact(con); break; case SHOW: ShowContact(con); break; case DEL: DelContact(con); break; case SORT: SortContact(con); break; case EXIT: SaveContact(con); DestoryContact(con); printf(------------退出通讯录------------\n); break; } } return 0; }5.文件的随机读写①fseek根据文件指针的位置和偏移量来定位文件指针int fseek ( FILE * stream, long int offset, int origin );//流 //偏移量 //起始位置stream:指向识别流的 FILE 对象的指针。offset:二进制文件从原点偏移的字节数。文本文件要么为零要么为 ftell 返回的值。origin:用作偏移量参考的位置。它由 cstdio 中定义的以下常量之一指定专门用作此函数的参数#includestdio.h #includestring.h #includeerrno.h int main() { FILE* pf fopen(My_通讯录.txt, r); if (pf NULL) { perror(foopen); return 1; } fseek(pf, 50, SEEK_SET); //从起始位置偏移50 fseek(pf, 23, SEEK_CUR); //从当前位置偏移23 fseek(pf, -2, SEEK_END); //从末尾偏移-2 int ch fgetc(pf); printf(%c, ch); fclose(pf); pf NULL; return 0; }②ftell返回文件指针相对于起始位置的偏移量long int ftell ( FILE * stream );#includestdio.h #includestring.h #includeerrno.h int main() { FILE* pf fopen(My_通讯录.txt, r); if (pf NULL) { perror(foopen); return 1; } fseek(pf, 5, SEEK_SET); //从起始位置偏移5 int ch fgetc(pf); printf(%c\n, ch); printf(%d\n, ftell(pf));//6 fseek(pf, 3, SEEK_CUR); //从当前位置偏移3 ch fgetc(pf); printf(%c\n, ch); printf(%d\n, ftell(pf));//10 fseek(pf, -2, SEEK_END); //从末尾偏移-2 ch fgetc(pf); printf(%c\n, ch); printf(%d\n, ftell(pf));//179 fclose(pf); pf NULL; return 0; }③rewind让文件指针的位置回到文件的起始位置void rewind ( FILE * stream );#includestdio.h #includestring.h #includeerrno.h int main() { FILE* pf fopen(My_通讯录.txt, r); if (pf NULL) { perror(foopen); return 1; } fseek(pf, 5, SEEK_SET); //从起始位置偏移5 int ch fgetc(pf); printf(%c\n, ch); printf(%d\n, ftell(pf));//6 rewind(pf); printf(%d\n, ftell(pf));//0 fclose(pf); pf NULL; return 0; }6.文本和二进制文件根据数据的组织形式数据文件被称为文本文件或者二进制文件。数据在内存中以二进制的形式存储如果不加转换的输出到外存就是二进制文件。如果要求在外存上以ASCII码的形式存储则需要在存储前转换。以ASCII字符的形式存储的文件就是文本文件。一个数据在内存中是怎么存储的呢字符一律以ASCII形式存储数值型数据既可以用ASCII形式存储也可以使用二进制形式存储。如有整数10000如果以ASCII码的形式输出到磁盘则磁盘中占用5个字节每个字符一个字节而二进制形式输出则在磁盘上只占4个字节VS2013测试。7.文件读取结束的判定①被错误使用的feof牢记在文件读取过程中不能用feof函数的返回值直接用来判断文件的是否结束。而是应用于当文件读取结束的时候判断是读取失败结束还是遇到文件尾结束。a.文本文件读取是否结束判断返回值是否为EOFfgetc或者NULLfgets。ofgetc判断是否为EOF。fgets判断返回值是否为NULb.二进制文件的读取结束判断判断返回值是否小于实际要读的个数。fread判断返回值是否小于实际要读的个数。8.文件缓冲区ANSIC标准采用“缓冲文件系统”处理的数据文件的所谓缓冲文件系统是指系统自动地在内存中为程序中每一个正在使用的文件开辟一块”文件缓冲区”。从内存向磁盘输出数据会先送到内存中的缓冲区装满缓冲区后才一起送到磁盘上。如果从磁盘向计算机读入数据则从磁盘文件中读取数据输入到内存缓冲区充满缓冲区然后再从缓冲区逐个地将数据送到程序数据区程序变量等。缓冲区的大小根据C编译系统决定的。这里可以得出一个结论因为有缓冲区的存在C语言在操作文件的时候需要做刷新缓冲区或者在文件操作结束的时候关闭文件。如果不做可能导致读写文件的问题。

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

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

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…