fek函数的用法是什么?
fek函数用于重定位流(数据流/文件)上的文件内部位置指针。
函数原型int fek(FILE *stream, long offt, int fromwhere);
参数:
stream为文件流的指针
offt 偏移量
fromwhere 起始位置
具体功能:如果执行成功,stream将指向以fromwhere(起始位置:文件头0(SEEK_SET),当前位置1(SEEK_CUR),文件尾2(SEEK_END))为基准,偏移offt(指针偏移量)个字节的位置。如果执行失败(比如offt超过文件自身大小),则不改变stream指向的位置。
扩展资料:
int fek(FILE *stream, long offt, int fromwhere);
第一个参数file指针
第二个参数移动的偏移量
第三个参数移动到哪里
分别用3个宏
SEEK_SET 既0 文件开头
SEEK_CUR 既1 文件当前位置
SEEK_END 既2 文件结尾
但不推荐用数字 最好用宏
参考资料来源:百度百科-fek
在C语言中fek()的功能
fek()是重定位流(数据流/文件)上的文件内部位置指针。
注意:文件指针指向文件/流。位置指针指向文件内部的字节位置,随着文件的读取会移动,文件指针如果不重新赋值将不会改变或指向别的文件。
如果执行成功,stream将指向以fromwhere为基准,偏移offt(指针偏移量)个字节的位置,函数返回0。如果执行失败(比如offt取值大于等于2*1024*1024*1024,即long的正数范围2G),则不改变stream指向的位置,函数返回一个非0值。
扩展资料:
注意事项
fek函数的文件指针,应该为已经打开的文件。如果没有打开的文件,那么将会出现错误。 fek函数也可以这样理解,相当于在文件当中定位。
这样在读取规律性存储文件时可以利用其OFFSET偏移量读取文件上任意的内容。
fek函数一般用于二进制文件,也可以用于文本文件。用于文本文件操作时,需特别注意只有fek(fp, 0, SEEK_SET) 和 fek(fp, ftell(fp), SEEK_SET)能确保结果符合预期。
参考资料来源:百度百科-fek
fek函数
fek函数:
int fek(FILE *stream, long offt, int fromwhere);函数设置文件指针stream的位置。
如果执行成功,stream将指向以fromwhere为基准,偏移offt(指针偏移量)个字节的位置,函数返回0。如果执行失败(比如offt超过文件自身大小),则不改变stream指向的位置,函数返回一个非0值。
实验得出,超出文件末尾位置,还是返回0。往回偏移超出首位置,返回-1,且指向一个-1的位置,请小心使用。
fek函数和lek函数类似,但lek返回的是一个off_t数值,而fek返回的是一个整型。
功能:
重定位流(数据流/文件)上的文件内部位置指针。
注意:文件指针指向文件/流。位置指针指向文件内部的字节位置,随着文件的读取会移动,文件指针如果不重新赋值将不会改变指向别的文件。
程序例:
#include <stdio.h>
long filesize(FILE*stream);
int main(void)
{
FILE *stream;
stream=fopen("MYFILE.TXT","w+");
fprintf(stream,"Thisisatest");
printf("FilesizeofMYFILE.TXTis%ldbytes\n",filesize(stream));
fclo(stream);
return 0;
}
long filesize(FILE*stream)
{
long curpos,length;
curpos=ftell(stream);
fek(stream,0L,SEEK_END);
length=ftell(stream);
fek(stream,curpos,SEEK_SET);
return length;
}
int fek( FILE *stream, long offt, int origin );
第一个参数stream为文件指针
第二个参数offt为偏移量,正数表示正向偏移,负数表示负向偏移
第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET
SEEK_SET: 文件开头
SEEK_CUR: 当前位置
SEEK_END: 文件结尾
其中SEEK_SET,SEEK_CUR和SEEK_END依次为0,1和2.
简言之:
fek(fp,100L,0);把文件内部指针移动到离文件开头100字节处;
fek(fp,100L,1);把文件内部指针移动到离文件当前位置100字节处;
fek(fp,-100L,2);把文件内部指针退回到离文件结尾100字节处。
使用实例:
#include<stdio.h>
#defineN5
typedefstructstudent{
longsno;
charname[10];
floatscore[3];
}STU;
voidfun(char*filename,STUn)
{
FILE*fp;
fp=fopen(filename,"rb+");
fek(fp,-1L*sizeof(STU),SEEK_END);
fwrite(&n,sizeof(STU),1,fp);
fclo(fp);
}
voidmain()/*修改覆盖最后一个学生数据*/
{
STUt[N]={{10001,"MaChao",91,92,77},{10002,"CaoKai",75,60,88},
{10003,"LiSi",85,70,78},{10004,"FangFang",90,82,87},
{10005,"ZhangSan",95,80,88}};
STUn={10006,"ZhaoSi",55,70,68},ss[N];
inti,j;FILE*fp;
fp=fopen("student.dat","wb");
fwrite(t,sizeof(STU),N,fp);
fclo(fp);
fp=fopen("student.dat","rb");
fread(ss,sizeof(STU),N,fp);
fclo(fp);
printf("\nTheoriginaldata:\n\n");
for(j=0;j<N;j++)
{
printf("\nNo:%ldName:%-8sScores:",ss[j].sno,ss[j].name);
for(i=0;i<3;i++)printf("%6.2f",ss[j].score[i]);
printf("\n");
}
fun("student.dat",n);
printf("\nThedataaftermodifing:\n\n");
fp=fopen("student.dat","rb");
fread(ss,sizeof(STU),N,fp);
fclo(fp);
for(j=0;j<N;j++)
{
printf("\nNo:%ldName:%-8sScores:",ss[j].sno,ss[j].name);
for(i=0;i<3;i++)printf("%6.2f",ss[j].score[i]);
printf("\n");
}
}
fek()函数
int fek(FILE *stream, long offt, int fromwhere);fek 用于二进制方式打开的文件,移动文件读写指针位置.
fek(in,-1L,1); -- 文件流in, 零点为当前指针位置,SEEK_CUR 就是 1, -1L -- 文件指针回退1个字节int fek( FILE *stream, long offt, int origin );
第一个参数stream为文件指针
第二个参数offt为偏移量,整数表示正向偏移,负数表示负向偏移
第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET
SEEK_SET: 文件开头
SEEK_CUR: 当前位置
SEEK_END: 文件结尾
其中SEEK_SET,SEEK_CUR和SEEK_END和依次为0,1和2.
简言之:
fek(fp,100L,0);把fp指针移动到离文件开头100字节处;
fek(fp,100L,1);把fp指针移动到离文件当前位置100字节处;
fek(fp,100L,2);把fp指针退回到离文件结尾100字节处
fek函数,文件指针定位
fek(fp1,m,1);把文件内部指针移动到离文件开头m字节处
第二个参数m偏移量,第三个参数1表示当前位置
它表示偏移量,如果m超过1行的长度,只会回到行首,你要将文件指针fp1上移两行不能用这个函数
fek,是用于二进制方式打开的文件,移动文件读写指针位置,通常文件打开后,读写位置按先后顺序。fek函数是设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere为基准,偏移offt(指针偏移量)个字节的位置。如果执行失败(比如offt超过文件自身大小),则不改变stream指向的位置。fek函数和lek函数类似,但lek返回的是一个off_t数值,而fek返回的是一个整型。
fek的用法
int fek(FILE *stream, long offt, int fromwhere);
第一个参数file指针
第二个参数移动的偏移量
第三个参数移动到哪里
分别用3个宏
SEEK_SET 既0 文件开头
SEEK_CUR 既1 文件当前位置
SEEK_END 既2 文件结尾
但不推荐用数字 最好用宏
简言之:
fek(fp,100L,SEEK_SET);把fp指针移动到离文件开头100字节处;
fek(fp,100L,SEEK_CUR);把fp指针移动到离文件当前位置100字节处;
fek(fp,100L,SEEK_END);把fp指针退回到离文件结尾100字节处。
此函数常用来计算流的长度:
int filesize = fek( fp, 0, SEEK_END );
fek( fp, 0, SEEK_SET );