L4文件IO-流刷新定位、格式化输入输出(day3)

本文详细介绍了C语言中的文件流刷新和定位操作,包括fflush用于刷新流缓冲区,ftell/fseek/rewind实现流定位。ftell返回当前读写位置,fseek设置新的读写位置,rewind将流重新定位到文件开始。同时讲解了格式化输入输出的使用,并给出了一项练习,要求每秒向文件追加系统时间。
摘要由CSDN通过智能技术生成

目录

一、文件流的刷新和定位

一、标准IO-刷新流

二、定位流 – ftell/fseek/rewind

 三、格式化输出/输入

 四、标准IO-思考练习

 day3作业:


一、文件流的刷新和定位

一、标准IO-刷新流

int fflush(FILE *fp); //(输出到的位置)

返回值:成功时返回0;出错时返回EOF
功能:将流缓冲区中的数据写入实际的文件
Linux下只能刷新输出缓冲区,输入缓冲区丢弃

如果输出到屏幕使用fflush(stdout)
 

#include<stdio.h>
#include<stdlib.h>
int main(int argc, const char *argv[])
{
	printf("abcde");
	//fflush(stdout);//不加fflash不会输出,因为缓冲区没满。加了就可以直接输出
	while(1){
		sleep(1);
	}
	return 0;
}

结果:

二、定位流 – ftell/fseek/rewind

long ftell(FILE *stream);
long fseek(FILE *stream, long offset,  int whence);    //(定位的文件,偏移量,从哪儿偏移)
void rewind(FILE *stream);

ftell() 成功时返回流的当前读写位置,出错时返回EOF
fseek()定位一个流,成功时返回0,出错时返回EOF 

fseek 参数whence参数:SEEK_SET/SEEK_CUR/SEEK_END
SEEK_SET 从距文件开头 offset 位移量为新的读写位置
SEEK_CUR:以目前的读写位置往后增加 offset 个位移量
SEEK_END:将读写位置指向文件尾后再增加 offset 个位移量
offset参数:偏移量,可正可负

注意事项:
1.文件的打开使用a模式 fseek无效
2.rewind(fp) 相当于 fseek(fp,0,SEEK_SET);//将流定位到文件开始位置
3.这三个函数只适用2G以下的文件

编译告警错误:
ffseek_t.c:13:11: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long int’ [-Wformat=]
    printf("current fp=%d\n",ftell(fp));
表示参数类型不匹配

解决办法:在参数前添加强制类型转换

#include<stdio.h>
int main(int argc, const char *argv[])
{
	FILE *fp;
	fp = fopen("1.txt","w");//a模式下fseek函数失效
	if(fp==NULL){
		perror("fopen:");

	return 0;
}

fwrite("abcdef"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值