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

Linux课程学习一

一.fopen与fclose函数

linux中fopen函数直接用man fopen 去查看

函数原型
FILE * fopen(constchar *path , cost char *mode)
/*
* @description : 打开一个文件
* @param ‐ path : 指定文件路径,如:"./test.txt",也可以直接由文件名
* @param ‐ mode :指定文件的打开方式,如下图:
* @return : 成功,返回指向该文件的文件指针; 若失败,返回 NULL
*/
参数说明:第一个参数为欲打开文件的文件路径及文件名,第二个参数表示对文件的打开方式
返回值:
文件打开了,返回一个指向该打开文件的指针(FILE结构);文件打开失败,错误上存errorcode(错误代码)。

注意:在fopen操作后要进行判断,是否文件打开,文件真正打开了才能进行后面的读或写操作,如有错误
要进行错误处理。

mode有以下值:
r:只读方式打开,文件必须存在
r+:可读写,文件必须存在
rb+:打开二进制文件,可以读写
rt+:打开文本文件,可读写
w:只写,文件存在则文件长度清0,文件不存在则建立该文件
w+:可读写,文件存在则文件长度清0,文件不存在则建立该文件
a:附加方式打开只写,不存在建立该文件,存在写入的数据加到文件尾,EOF符保留
a+:附加方式打开可读写,不存在建立该文件,存在写入的数据加到文件尾,EOF符不保留
wb:打开二进制文件,只写 wb+:打开或建立二进制文件,可读写
wt+:打开或建立文本文件,可读写
at+:打开文本文件,可读写,写的数据加在文本末尾

ab+:打开二进制文件,可读写,写的数据加在文件末尾
由mode字符可知,上述如r、w、a在其后都可以加一个b,表示以二进制形式打开文件

二.fread与fwrite函数

fread函数:从文件中读取数据到指定的地址中

函数原型
size_t fread(void*buff , size_t size, size_t count , FILE* stream)
/*
* @description :对已打开的流进行数据读取
* @param ‐ ptr :指向 数据块的指针
* @param ‐ size :指定读取的每个数据项的字节数(一次读多少字节)
* @param ‐ nmemb : 指定要读取的数据项的个数(一次读多少次)
* @param ‐ stream :要读取的文件流
* @return : 返回实际读取数据项的个数;
*/
参数:
第一个参数为接收数据的指针(buff),也即数据存储的地址
第二个参数为单个元素的大小,即由指针写入地址的数据大小,注意单位是字节
第三个参数为元素个数,即要读取的数据大小为size的元素个素
第四个参数为提供数据的文件指针,该指针指向文件内部数据
返回值:读取的总数据元素个数

列如
int num,count;
int* pr=new int[num*count];
fread(pr, num*4, count, stream); //stream为fopen中返回的FILE指针

要将数据写入pr中,必须为pr分配内存,一个int为4个字节,所以要x4

int fread(void *buffer,intsize,intcount,FILE*fp)
void *memset(void*buffer, int c, int count)
buffer:为指针或是数组
c:是赋给buffer的值
count:是buffer的长度
memset(void*buff,0,sizeof(buff)); 用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初
始化为‘’或‘/0’;

fwrite()──从buffer开始,一次输出size个字节,重复count次,并将输出的数据存放到fp所指向的文件中。buffer是要输出数据在 内存中的起始地址(即从何处开始输出)。
一般用于二进制文件的处理。

fread函数是把文件里的内容读出来然后放到一个数组中,fwrite函数是写内容到一个文件里。

模式改成可读可写

之前我们再mm文件中写了123456789,之后用fread函数将其读出来并且输出,现在我们用fwrite函数继续往mm文件中写入四个字节,注意,用fread函数的时候将光标移动到了8的后面,所以写入的数据把9覆盖了。

三.fseek函数

接着上面的程序写代码,fread之后光标是在8后面的,我们现在将光标移动到离文件开头有1距离的位置,即1之后,所以我们再次写入的时候hello是在1之后,将其他内容覆盖了

http://www.dtcms.com/a/99824.html

相关文章:

  • 【区块链安全 | 第五篇】DeFi概念详解
  • Kubernetes比同规格虚拟机性能相差多少?
  • 《Express:Node.js 里的 “闪电侠”》
  • Playwright从入门到实战:比Selenium更快的数据爬取案例实战
  • STL-string容器
  • 蓝桥杯嵌入式学习笔记
  • SQL IF(xxx, 1, 0) 窗口函数
  • 【嵌入式学习3】TCP服务器客户端 - UDP发送端接收端
  • Supabase 匿名密钥与服务角色密钥详细对比文档
  • .NET 9 中的新增功能:关键更新和 C# 12 功能简化
  • C#核心学习(一)面向过程与面向对象编程---初识类和对象
  • 深入理解MySQL聚集索引与非聚集索引
  • fetch的语法规则及常见用法
  • EasyExcel 与 Apache POI:Java 操作 Excel 的详解
  • 6-1-1 利用AI完成一个可视化看板
  • 如何监控和优化服务器的 CPU 性能
  • 视频联网平台智慧运维系统:智能时代的城市视觉中枢
  • 记录一次Dell服务器更换内存条报错解决过程No memory found
  • 基于微波光子信道的图像传输系统matlab仿真,调制方式采用OFDM+QPSK,LDPC编译码以及LS信道估计
  • 机器学习——集成学习框架(GBDT、XGBoost、LightGBM、CatBoost)、调参方法
  • 计算机基础
  • 睡眠健康领域的智能硬件设备未来的发展趋势
  • C语言术语
  • 算法刷题记录——LeetCode篇(1.3) [第21~30题](持续更新)
  • 分库分表详解
  • 关于c++的FLOYD算法 P2910 [USACO08OPEN] Clear And Present Danger S 题解
  • Spring Boot 整合 RabbitMQ:注解声明队列与交换机详解
  • 高级SQL技巧
  • Linux(8.6)rsync
  • 33. Java 流程控制语句 If-Then-Else 语句