fread/fseek 耗时问题

http://bbs.csdn.net/topics/360228398


fseek
原型:int fseek(FILE *stream, long offset, int fromwhere);
功能:重定位流(数据流/文件)上的文件内部位置指针
注意:不是定位文件指针(文件指针是 FILE * fp 这样的),文件指针指向文件/流。位置指针指向文件内部的字节位置,随着文件的读取会移动,文件指针如果不重新赋值将不会改变指向别的文件。

函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere(偏移起始位置:文件头(SEEK_SET)0,当前位置(SEEK_CUR)1,文件尾(SEEK_END)2)为基准,偏移offset(指针偏移量)个字节的位置。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置。

返回值:成功,返回0,失败返回-1,并设置errno的值,可以用perror()函数输出错误。

第一个参数stream为文件指针
第二个参数offset为偏移量,正数表示正向偏移,负数表示负向偏移
第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET
SEEK_SET: 文件开头
SEEK_CUR: 当前位置
SEEK_END: 文件结尾
其中SEEK_SET,SEEK_CUR和SEEK_END依次为0,1和2.
简言之:
fseek(fp,100L,0); 把文件内部指针移动到离文件开头100字节处;
fseek(fp,100L,1); 把文件内部指针移动到离文件当前位置100字节处;
fseek(fp,-100L,2); 把文件内部指针退回到离文件结尾100字节处。

fread的功 能: 从一个流中读数据
fread 在使用过程中,首先由 FILE 确定一个文件指针 fp,fp 通过 fopen 将对象确定,fread此时对文件的操作是 文件内部位置指针移动一个字节再读取一个字节

函数原型: size_t fread( void * buffer , size_t size , size_t count , FILE * stream );
【fread/fseek 耗时问题】参 数:
1.用于接收数据的地址(指针)(buffer
2.单个元素的大小(size) :单位是字节而不是位,例如读取一个整型数就是2个字节
3.元素个数(count
4.提供数据的文件指针(stream)
返回值:
(1)成功时返回实际读入的元素个数
(2)若文件达到末尾,则返回0
(3)出错时,返回-1




    推荐阅读