目录
一、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;
}