fseek函数
fseek的用法
offset是偏移量大小(可正可负),whence是偏移的相对位置。
whence可以为SEEK_SET文件首,SEEK_CUR文件当前位置,SEEK_END文件尾。
返回值
操作成功返回0,否则返回1。
ftell函数
反映文件位置指针当前所在的位置。
rewind函数
rewind是将文件位置指针seek到文件开始处,是用fseek函数封装的。
fflush函数
fflush的用法
当参数为空时,所有流都被刷新
例子
代码1
因为printf函数将数据写入标准输出缓冲区,标准输出缓冲区时行缓冲,换行时刷新,所以这里什么都不输出。
#include <stdio.h>
#include <stdlib.h>
/*
* 缓冲区的作用:大多数情况下是好事,合并系统调研
*
*行缓冲:换行时候刷新,满了的时候刷新,强制刷新(标准输出是这样的)
*
*全缓冲:满了的时候刷新,强制刷新(默认,只要不是终端设备)
*
*无缓冲:如stderr,需要立即输出的内容
setvbuf
* */
int main()
{
int i;
printf("Before while()");
while(1);
printf("After while()");
exit(0);
}
代码2
在printf最后增加换行符,刷新缓冲区。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i;
printf("Before while()\n");
while(1);
printf("After while()\n");
exit(0);
}
代码3
使用fflush刷新缓冲区
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i;
printf("Before while()");
fflush(stdout);
while(1);
printf("After while()");
fflush(NULL);
exit(0);
}
使用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 == NULL)
{
perror("fopen():");
exit(1);
}
fseek(fp, 0, SEEK_END);
printf("%ld\n", ftell(fp));
fclose(fp);
exit(0);
}