定位标准I/O流的三种方法:
- ftell和fseek函数,假定文件的文件的位置可以存放一个长整型中。
- ftello和fseeko函数,使用文件偏移量off_t数据类型代替了长整型
- fgetpos和fsetpos函数,使用抽象数据类型fpos_t记录文件的位置,用以记录文件位置
#include <stdio.h>
long ftell(FILE *stream);
//stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了流。该函数返回位置标识符的当前值。如果发生错误,则返回 -1L,全局变量 errno 被设置为一个正值
off_t ftello(FILE *fp);//除了返回类型不同以外,ftello和tello相同
int fseek(FILE * stream, long offset, int whence);
//参数stream 为已打开的文件指针,参数offset 为根据参数whence 来移动读写位置的位移数。当调用成功时则返回0, 若有错误则返回-1, errno 会存放错误代码.
int fseeko(FILE *fp,off_t offset,int whence);除了返回类型不同以外,fseeko和fseek相同
void rewind(FILE * stream);
//stream为以打开文件的指针。该函数将一个流设置到文件的起始位置
int fgetpos(FILE *stream, fpos_t *pos);
//fp为当前文件流的指针,pos为指向fpos_t类型的指针。如果成功,该函数返回零。如果发生错误,则返回非零值。
int fsetpos(FILE *fp, fpos_t *pos);
//fp为当前文件流指针,pos为fpos_t类型的文件读或写指针的位置。如果成功,该函数返回零值,否则返回非零值,并设置全局变量 errno 为一个正值,该值可通过 perror 来解释。
example:
#include <stdio.h>
int main()
{
FILE* fp;
int len;
fp=fopen("test.txt","r");
if(fp==NULL)
{
perror("error when open");
return -1;
}
fseek(fp,0,SEEK_END);
len=ftell(fp);
fclose(fp);
printf("size of file:%d Bytes",len);
return 0;
}
运行结果:
以上内容来源于网络,仅作本人学习笔记使用,关于本书请参考APUE。