原文地址:https://mistsatan.github.io/articles/Function-fseek-and-ftell.html
在做CTF的逆向题目时遇到的函数,简单记录一下。
首先放上参考链接:
fseek()
int fseek(FILE *stream, long offset, int whence);
**功能:**用来移动文件流的读写位置.
参数说明:
- stream:已打开的文件指针
- offset:偏移量(long类型),表示要从起始点开始要移动的距离:
模式 | 对应数值 |
---|---|
正数 | 向前移 |
负数 | 向后移 |
0 | 保持不动 |
- whence:模式,用于确定起始位置:
模式 | 对应数值 | 偏移量的起始位置 |
---|---|---|
SEEK_SET | 0 | 文件开头 |
SEEK_CUT | 1 | 文件当前位置 |
SEEK_END | 2 | 文件末尾 |
举例:
//fp是一个文件指针
fseek(fp, 0L, SEEK_SET); //定位至文件开始处
fseek(fp, 10L, SEEK_SET); //定位至文件中的第10个字节
fseek(fp, 2L, SEEK_CUR); //从文件当前位置前移2个字节
fseek(fp, 0L, SEEK_END); //定位至文件结尾
fseek(fp, -10, SEEK_END); //从文件结尾处回退10个字节
返回值:
- 一切正常,则返回0
- 出现错误(例如试图移动的距离超出了文件的范围),则返回-1
ftell()
long ftell(FILE * stream);
**功能:**用来获取文件读写指针的当前位置
参数说明:
- stream:已打开的文件指针
返回值:
- 成功,则返回当前的读写位置
- 失败,则返回 -1