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
推荐阅读
- 个人日记|K8s中Pod生命周期和重启策略
- 学习分享|【C语言函数基础】
- C++|C++浇水装置问题
- 数据结构|C++技巧(用class类实现链表)
- C++|从零开始学C++之基本知识
- 步履拾级杂记|VS2019的各种使用问题及解决方法
- leetcode题解|leetcode#106. 从中序与后序遍历序列构造二叉树
- 动态规划|暴力递归经典问题
- 麦克算法|4指针与队列
- 遇见蓝桥遇见你|小唐开始刷蓝桥(一)2020年第十一届C/C++ B组第二场蓝桥杯省赛真题