#include <stdio.h>
int fseek(FILE *stream, long offset, int whence);
将stream所代表的文件的指针,从whence开始移动offset个字节(offset可以是负数,代表向前移动)。
参数whence有以下3种宏定义:
SEEK_SET:起始位置
SEEK_CUR:当前位置
SEEK_END:文件末尾
linux系统自带的lseek用法与fseek大同小异,只是lseek的返回值是有意义的,代表文件当前指针的位置。
long ftell(FILE *stream);
返回当前文件指针位置。
void rewind(FILE *stream);
将当前文件指针置于文件开头。
代码演示如下:
#include "./common/head.h"
int main(int argc, char *argv[])
{
FILE *fp = fopen(argv[1], "r+"); //可读可写
if(!fp){
perror("fopen");
exit(1);
}
//替换文件前两个字符为AB
fputc('A', fp);
fputc('B', fp);
rewind(fp); //文件指针回到文件头,相当于fseek(fp, 0, SEEK_SET);
fseek(fp, -3, SEEK_END); //文件指针从文件未尾向前移动3位(vim编辑的文件,会自动在末尾加一个换行)
//文件末尾的两个字符(不包括换行),被替换成ab
fputc('a', fp);
fputc('b', fp);
fseek(fp, 0, SEEK_END); //文件指针移动到文件尾
printf("fileSize = %ld\n", ftell(fp)); //打印文件大小
fclose(fp);
return 0;
}
拓展:
向终端输出时,也可以用glibc库的函数进行操作(同理向终端输入也一样),例如:
fputc('a', stdout); //向终端输出一个字符’a'
此外,fprintf函数向文件中输出格式字符串,这一类函数大同小异,都是通过FILE *类型的句柄,对文件进行操作。