十二、Linux文件 - fseek函数讲解
目录
一、fseek函数讲解
二、fseek函数实战
一、fseek函数讲解
重定向文件内部的指针
注:光标 ---- 文件内部的指针
函数原型:
int fseek(FILE *stream,long offset,int framewhere)
- 参数:
- stream:文件指针
- offset:指针的偏移量
- framewhere:指针偏移起始位置
- 返回值:重定位成功返回0,否则返回非零
需要注意的是该函数不是重定位文件指针,而是重定位文件内部的指针,让指向文件内部数据的指针移到文件中我们感兴趣的数据上,重定位主要是这个目的。
说明:执行成功,则stream指向fromwhere为基准,偏移offset个字节的位置。执行失败(比方说offset偏移的位置超出了文件大小),则保留原来的stream的位置不变
分别用3个宏:
- SEEK_SET 即0 文件开头
- SEEK_CUR 即1 文件当前位置
- SEEK_END 即2 文件末尾
但不推荐用数字,最好用宏,简言之:
- fseek(fp,100L,SEEK_SET);把fp指针移动到离文件开头100字节处;
- fseek(fp,100L,SEEK_CUR);把fp指针移动到离文件当前位置100字节处;
- fseek(fp,100L,SEEK_END);把fp指针退回到离文件结尾100字节处;
二、fseek函数实战
- 执行流程
- 代码内容
源代码:
#include <stdio.h>
#include <string.h>
int main()
{FILE *fp = NULL;int nRet = 0;char readBuff[12];memset(readBuff,0,12);char* writeBuff = "hello world!";fp = fopen("mm","r+");//r+if(fp == NULL){printf("open failed!\n");return -1;}printf("open success1\n");nRet = fread(readBuff,4,2,fp);if(nRet <= 0){printf("fread failed!\n");return -3;}printf("read %s\n",readBuff);nRet = fseek(fp,1,SEEK_SET);if(nRet != 0){printf("fseek failed!");return -4;}printf("fseek succeess!\n");nRet = fwrite(writeBuff,4,1,fp);if(nRet <= 0){printf("fwrite failed!");return -4;}printf("fwrite success!\n");nRet = fclose(fp);if(nRet != 0){printf("close failed!\n");return -2;}printf("close success1\n");return 0;
}