文件的随机读写及文件缓冲区

article/2025/9/3 15:06:39

目录

一. 文件的随机读写

  二.文件缓冲区

进度条


一. 文件的随机读写

我们在使用完文件指针的时候,指针指向的是数据的末尾,那么如果要更改这个指针的位置,我们就要了解这几个函数:fseek(根据文件指针的位置和偏移量来定位文件指针),ftell(返回文件指针相对于起始位置的偏移量),rewind(让文件指针的位置回到文件的起始位置)。

首先我们通过fseek来看一下接下来需要用到的几个参数:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAemgwMTIzMA==,size_18,color_FFFFFF,t_70,g_se,x_16

指针的位置我们可以用这三个来确定指针位置

  • SEEK_CUR  文件指针当前的位置
  • SEEK_END  文件末尾的位置
  • SEEK_SET  文件开始的位置 

假设在test文件中存入了abcdefg。通过下图我们可以了解fseek的原理。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAemgwMTIzMA==,size_20,color_FFFFFF,t_70,g_se,x_16

因为上面将偏移量改为2后又使用了一次fgetc函数,所以此时 指针指向的是d,因此结果为3。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAemgwMTIzMA==,size_10,color_FFFFFF,t_70,g_se,x_16

 接下来是rewind

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAemgwMTIzMA==,size_12,color_FFFFFF,t_70,g_se,x_16

  二.文件缓冲区

我们可以将内存向磁盘输出数据的过程想象为一个送快递的过程,假设A买了10个物品,如果快递员每收到一个快递就将其送到A的手上,这样的效率就很低。

那么如将这个快递先存入快递点,等到10个快递都到了的时候,再将他们一块送到A的手上,这样效率就得到了很大的提升。在这个过程中A就是磁盘,商家就是程序数据区,而快递点就是我们的文件缓冲区。同理,我们在从磁盘中读取数据时也是要经过文件缓冲区的。

这里我们要注意只有缓冲区刷新或是程序结束时的时候,才能将缓冲区的数据写入磁盘。这个过程可以通过以下代码来进行验证。

int main()
{FILE*pf = fopen("test.txt", "w");fputs("abcdef", pf);//先将代码放在输出缓冲区printf("睡眠10秒\n");Sleep(10000);printf("刷新缓冲区\n");fflush(pf);printf("再睡眠10秒\n");Sleep(10000);fclose(pf);//fclose在关闭文件的时候,也会刷新缓冲区pf = NULL;return 0;
}

进度条

首先要知道回车\r与换行\n的效果是不同的,回车是把光标移到开始,换行是跳到下一行。

由于\r并不会换行,所以我们可以通过不断的刷新缓冲区,来实现进度条的效果

int main()
{int n=0;char arr[101]={0};const char* flag = "|/-\\";while(n<100){arr[n++]='#';printf("%-100s %d%% %c\r",arr,n,flag[n%4]);fflush(stdout);//刷新缓冲区usleep(30000);}printf("\n");return 0;
}


http://chatgpt.dhexx.cn/article/47qcMXLD.shtml

相关文章

SpringBoot处理静态文件缓存机制详解

前言 紧接上文SpringBoot处理静态文件源码分析&#xff0c;分析下其中处理静态文件时的缓存机制 http协议 http协议有一条规则&#xff1a; 当response header中携带Last-Modified时&#xff0c;当再次发起一个相同请求时会把Last-Modified的值放到request header的If-Modi…

apache设置html缓存,宝塔面板apache配置静态文件缓存

将网站静态资源内容,如jpg,gif,png,js,css文件,页面打开时自动缓存到本地,而不是每次都去从服务器请求资源,设置一定的缓存时间,这样做可以减轻服务器的带宽压力,同时使网页打开速度加快,提高用户体检。 宝塔面板如何配置静态文件缓存呢?下面我们一起来操作 加载mod_ex…

linux vi 缓存文件,Vim中的几种文件备份方法总结

一、Vim 的交换文件 .filename.swp 默认交换文件在打开文件的时候就会产生交换文件&#xff0c;正常退出的时候才会删除交换文件(断电&#xff0c;CtrlZ强制退出就不会删除)&#xff0c;内容大致是这个样子。 通过在 Vim 配置文件设置 set noswapfile 来关闭交换文件。 二、 Vi…

CMake中set/unset的使用

CMake中的set命令用于将普通、缓存或环境变量(normal, cache, or environment variable)设置为给定值&#xff0c;其格式如下&#xff1a;指定<value>...占位符(placeholder)的此命令的签名需要零个或多个参数。多个参数将作为分号分割的list连接&#xff0c;以形成要设置…

Nginx缓存静态文件

nginx的一大功能就是完成静态资源的分离部署&#xff0c;减轻后端服务器的压力&#xff0c;如果给这些静态资源再加一级nginx的缓存&#xff0c;可以进一步提升访问效率。 第一步&#xff1a;添加nginx.conf的http级别的缓存配置 ##cache##proxy_connect_timeout 500;#跟后端服…

第一个c语言简单小程序

还有很多不会的地方&#xff0c;以后还要好好学习才行

C语言小程序实现电脑关机

一、需求分析 1.电脑在2分钟后关机&#xff1b; 2.输入 我最棒 则取消电脑关机 3.输入错误时&#xff0c;可以在2分钟内重复输入 二、代码 #include<stdio.h> #include<stdlib.h> #include<string.h> int main() {char arr[10] {0};system("shutd…

【C/C++ 经典小程序(一)】

【1】九九乘法表 输出9*9口诀。共9行9列&#xff0c;i控制行&#xff0c;j控制列。 #include <stdio.h> void main() {int i,j,result;for (i1;i<10;i){ for(j1;j<i;j){resulti*j;printf("%d*%d%-3d",i,j,result);/*-3d表示左对齐&#xff0c;占3位*/}pr…

c语言编写简单实用的小程序,C语言编写一个小程序

用C/C编写一个小程序 #include using namespace std; int main() { int b[6]{1,2,2,3,4,5},i,j,k,l,m,n,p,c,d,*a[6]; for(j0;j<6;j) a[j]&b[j]; for(j0;j<6;j) { a[0]&b[j]; for(k0;k<6;k) { if(kj) continue; a[1]&b[k]; for(l0;l<6;l) { if(lj||lk)…

编写C语言的最简单小程序Hello world和函数使用

编写C语言的最简单小程序Hello world 一、示例一 1、编写demo.c程序 #include<stdio.h> int main() {printf("Hello world!");return 0; } 程序的第一行 #include <stdio.h> 是预处理器指令&#xff0c;告诉 C 编译器在实际编译之前要包含 stdio.h 文…

C语言小程序:通讯录(文件版)

在静态版本的通讯录里面实现了通讯录的基本逻辑&#xff0c;但是空间大小是固定的&#xff0c;这样子就会显得很不灵活&#xff0c;会有浪费空间和空间不足的问题&#xff0c;所以在动态版本的通讯里面我们通过动态内存开辟使用malloc函数给通讯录动态的开辟一块空间&#xff0…

C语言有趣的小程序

最近闲着没事写了一个C语言小程序,就当作是玩玩。 本小程序的各个功能都是通过dos命令来实现的。 运行结果如下图: 该小程序有以下几个功能: 1、启动计算器 2、新建记事本 3、打开画图板 4、定时关机(15s、30s、60s) 5、显示系统时间或修改 6、重启计算机 小程序源代码…

C语言小程序:通讯录(静态版)

哈喽各位老铁们&#xff0c;今天给大家带来一期通讯录的静态版本的实现&#xff0c;何为静态版本后面会做解释&#xff0c;话不多说&#xff0c;直接开始&#xff01; 关于通讯录&#xff0c;其实也就是类似于我们手机上的通讯录一样&#xff0c;有着各种各样的功能&#xff0c…

C语言小程序分享

本文为大一时所写的文章&#xff08;2017/4/23&#xff09;&#xff0c;文笔还很生疏&#xff0c;在很多问题上认识不深&#xff0c;算是在学校的微信公众号上的一个编程探究模块上的投稿&#xff0c;本人当时也参与了本模块的维护和管理。补档。 上个周末的一个下午&#xff0…

C语言小程序-学生成绩统计系统

C语言小程序-学生成绩统计系统 参考了 另一位博主的代码(https://blog.csdn.net/qq_36503589/article/details/53106983) 我后来写的成绩排序版本链接&#xff1a;https://blog.csdn.net/qq_43617268/article/details/103491760 功能介绍&#xff1a;本程序可以输入50人以内的…

C语言10个经典小程序——小白必备!

网上有很多的人说编程有多么多么无聊。。。。So Boring ! 。。。其实小编想说:不要管别人怎么说,别人说什么,做你自己喜欢做的事就好。坚持下来,你会发现编程的乐趣的。。。。当然,如果你觉得学习编程语言很痛苦,坚持了一段时间后无果,南无果断放弃未必不是一个好的选择…

C语言小程序:如何用代码“画”出一个爱心

利用ASCII编码第三个字符&#xff0c;作为基础&#xff0c;然后利用三个多重循环画出一个爱心出来。要使用控制台改变运行框大小和文字的颜色&#xff0c;黑白的爱心不免有些诡异。 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <math.h> #inclu…

我的第一个c语言小程序

标题&#xff1a;判断题答题小程序 Author: plc6666 软工专业 工科男 格言&#xff1a;总有人间一两风&#xff0c;填我十万八千梦。 文章目录 标题&#xff1a;判断题答题小程序 一.程序的由来二.程序的状况1.程序实现了颜色转换的功能2.程序能随机抽20题&#xff0c;不重复3.…

C语言10个经典小程序

【程序1】 题目&#xff1a;有1、2、3、4个数字&#xff0c;能组成多少个互不相同且无重复数字的三位数&#xff1f;都是多少&#xff1f; 1.程序分析&#xff1a;可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去       掉不满足条件的排列。 2.程序源…

用 C语言的写出几个小程序

系列文章目录 前言 1、第一章&#xff1a;求出一个整型数组中的最大值 2、第二章&#xff1a;打印出100~999之间所有的水仙花数 3、第三章&#xff1a;输入一个数&#xff0c;打印出n行杨辉三角 4、第四章&#xff1a;小只因跳楼梯问题 5、第五章&#xff1a;创建一个含是…