程序:
#include<stdio.h>
intmain(intargc,char*argv[])
{
FILE*stream;
fpos_tpos;
stream = fopen(“/etc/passwd”,”r”);
fseek(stream,5,SEEK_SET);
printf(“offset=%d/n”,ftell(stream));
rewind(stream);
/*取得指针位置并存入&pos所指向的对象*/
fgetpos(stream,&pos);
printf(“offset=%d/n”,pos);
pos = 10;
fsetpos(stream,&pos);
printf(“offset=%d/n”,ftell(stream));
fclose(stream);
return 0;
}
结果:
offset=5
offset= 0
offset = 10
fseek(移动文件流的读写位置)
头文件
#include<stdio.h>
定义函数
intfseek(FILE*stream,longoffset,intwhence);
函数说明
fseek()用来移动文件流的读写位置。参数stream为已打开的文件指针,参数offset为根据参数whence来移动读写位置的位移数。
参数whence为下列其中一种:
SEEK_SET--文件开头offset位移量 为 新的读写位置。
SEEK_CUR--目前的读写位置往后增加offset个位移量。
SEEK_END--指向文件尾再增加offset个位移量 为 新的读写位置。
当whence值为SEEK_CUR或SEEK_END时,参数offset允许负值的出现。
下列是较特别的使用方式:
1)欲将读写位置移动到文件开头时:fseek(FILE*stream,0,SEEK_SET);
2)欲将读写位置移动到文件尾时:fseek(FILE*stream,0,0SEEK_END);
返回值
当调用成功时则返回0,若有错误则返回-1,errno会存放错误代码。
附加
fseek()不像lseek()会返回读写位置,因此必须使用ftell()来取得目前读写的位置。
ftell(取得文件流的读取位置)
头文件
#include<stdio.h>
定义函数
longftell(FILE*stream);
函数说明
ftell()用来取得文件流目前的读写位置。参数stream为已打开的文件指针。
返回值
当调用成功时则返回目前的读写位置,若有错误则返回-1,errno会存放错误代码。
错误代码EBADF参数stream无效或可移动读写位置的文件流。
rewind(重设文件流的读写位置为文件开头)
头文件
#include<stdio.h>
定义函数
voidrewind(FILE*stream);
函数说明
rewind()用来把文件流的读写位置移至文件开头。参数stream为已打开的文件指针。此函数相当于调用fseek(stream,0,SEEK_SET)。
返回值
无返回值
fgetpos(取得当前文件的指针所指的位置)
头文件
#include<stdio.h>
函数原型
intfgetpos(FILE*stream,fpos_t*pos);
函数功能
取得当前文件的指针所指的位置,并把该指针所指的位置数存放到pos所指的对象中。pos值以内部格式存储,仅由fgetpos和fsetpos使用。其中fsetpos的功能与fgetpos相反,为了详细介绍,将在后节给与说明。
返回值
成功返回0,失败返回非0,并设置errno。
fsetpos(将文件指针定位在pos指定的位置上)
头文件
#include<stdio.h>
函数原型
intfsetpos(FILE*fp,constfpos_t*pos);
函数功能
将文件指针定位在pos指定的位置上。该函数的功能与前面提到的fgetpos相反,是将文件指针fp按照pos指定的位置在文件中定位。pos值以内部格式存储,仅由fgetpos和fsetpos使用。
返回值
成功返回0,否则返回非0。