IO学习三(fseek、ftell、rewind、fflush、 getline、临时文件)

我们现在要做这样一件事:
fp=fopen();
打开一个文件
fputc(fp) 10;
每次写进一个字符,写10次,就往文件中写了10个字符
fgetc()
10;
想要读出写进去的字符,那么就读10次

上面的逻辑是错误的,因为文件当中有一个文件位置指针,写的时候是依次向后移动,读的时候也是,像是一个游标。
读和写一定是从当前位置开始的,上面伪码在写完以后,位置指针最终指向的是第十个位置,然后读的时候,就会从第十一个位置开始。读的内容不知道。

有一个很笨拙地方法:
fp=fopen();
fputc(fp) 10;
fclose(fp);//先关闭
fopen(fp);//然后再一次打开,这个时候文件指针就在文件开始处
fgetc()
10;
以上伪代码可以实现,但是这种方法不实际

fseek();ftell();rewind():

------------------ reposition a stream(重新定位一个文件流)


   #include <stdio.h>
   int fseek(FILE *stream, long offset, int whence);//返回值:如果成功返回0,出错返回非0值
中间的参数是一个偏移量的大小。
第三个参数是一个位置量(从什么位置开始)

   long ftell(FILE *stream);//返回值:若成功,就返回当前文件位置指示,出错就返回-1L,反映出文件位置指针当前位置是哪里

   void rewind(FILE *stream);//相当于:(void) fseek(stream, 0L, SEEK_SET)   功能:将文件指针指在文件的开始处。

SEEK_SET:表示从文件的起始位置开始
SEEK_CUR:表示从文件的当前位置开始
SEEK_END:表示从文件的尾端开始

伪代码可以写成这样:
fp=fopen();
fputc(fp) 10;
想要从文件首开始,可以使用下面的函数
fseek(fp,0,SEEK_SET);
fgetc()
10;

小例子:
函数功能:利用fseek和ftell来计算文件的长度

#include <stdio.h>
#include <stdlib.h>

int main(int argc,char *argv[])
{
   
	FILE *fp;
	int count=0;
	if(argc<2)
	{
   
		fprintf(stderr,"Usage.....\n");
		exit(1);
	}

	fp=fopen(argv[1],"r");
	if(fp
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值