fek函數(shù)的用法是什么?
fek函數(shù)用于重定位流(數(shù)據(jù)流/文件)上的文件內(nèi)部位置指針。
函數(shù)原型int fek(FILE *stream, long offt, int fromwhere);
參數(shù):
stream為文件流的指針
offt 偏移量
fromwhere 起始位置
具體功能:如果執(zhí)行成功,stream將指向以fromwhere(起始位置:文件頭0(SEEK_SET),當(dāng)前位置1(SEEK_CUR),文件尾2(SEEK_END))為基準(zhǔn),偏移offt(指針偏移量)個字節(jié)的位置。如果執(zhí)行失敗(比如offt超過文件自身大小),則不改變stream指向的位置。
擴(kuò)展資料:
int fek(FILE *stream, long offt, int fromwhere);
第一個參數(shù)file指針
第二個參數(shù)移動的偏移量
第三個參數(shù)移動到哪里
分別用3個宏
SEEK_SET 既0 文件開頭
SEEK_CUR 既1 文件當(dāng)前位置
SEEK_END 既2 文件結(jié)尾
但不推薦用數(shù)字 最好用宏
參考資料來源:百度百科-fek
在C語言中fek()的功能
fek()是重定位流(數(shù)據(jù)流/文件)上的文件內(nèi)部位置指針。
注意:文件指針指向文件/流。位置指針指向文件內(nèi)部的字節(jié)位置,隨著文件的讀取會移動,文件指針如果不重新賦值將不會改變或指向別的文件。
如果執(zhí)行成功,stream將指向以fromwhere為基準(zhǔn),偏移offt(指針偏移量)個字節(jié)的位置,函數(shù)返回0。如果執(zhí)行失敗(比如offt取值大于等于2*1024*1024*1024,即long的正數(shù)范圍2G),則不改變stream指向的位置,函數(shù)返回一個非0值。
擴(kuò)展資料:
注意事項
fek函數(shù)的文件指針,應(yīng)該為已經(jīng)打開的文件。如果沒有打開的文件,那么將會出現(xiàn)錯誤。 fek函數(shù)也可以這樣理解,相當(dāng)于在文件當(dāng)中定位。
這樣在讀取規(guī)律性存儲文件時可以利用其OFFSET偏移量讀取文件上任意的內(nèi)容。
fek函數(shù)一般用于二進(jìn)制文件,也可以用于文本文件。用于文本文件操作時,需特別注意只有fek(fp, 0, SEEK_SET) 和 fek(fp, ftell(fp), SEEK_SET)能確保結(jié)果符合預(yù)期。
參考資料來源:百度百科-fek
fek函數(shù)
fek函數(shù):
int fek(FILE *stream, long offt, int fromwhere);函數(shù)設(shè)置文件指針stream的位置。
如果執(zhí)行成功,stream將指向以fromwhere為基準(zhǔn),偏移offt(指針偏移量)個字節(jié)的位置,函數(shù)返回0。如果執(zhí)行失敗(比如offt超過文件自身大小),則不改變stream指向的位置,函數(shù)返回一個非0值。
實驗得出,超出文件末尾位置,還是返回0。往回偏移超出首位置,返回-1,且指向一個-1的位置,請小心使用。
fek函數(shù)和lek函數(shù)類似,但lek返回的是一個off_t數(shù)值,而fek返回的是一個整型。
功能:
重定位流(數(shù)據(jù)流/文件)上的文件內(nèi)部位置指針。
注意:文件指針指向文件/流。位置指針指向文件內(nèi)部的字節(jié)位置,隨著文件的讀取會移動,文件指針如果不重新賦值將不會改變指向別的文件。
程序例:
#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 );
第一個參數(shù)stream為文件指針
第二個參數(shù)offt為偏移量,正數(shù)表示正向偏移,負(fù)數(shù)表示負(fù)向偏移
第三個參數(shù)origin設(shè)定從文件的哪里開始偏移,可能取值為:SEEK_CUR、 SEEK_END 或 SEEK_SET
SEEK_SET: 文件開頭
SEEK_CUR: 當(dāng)前位置
SEEK_END: 文件結(jié)尾
其中SEEK_SET,SEEK_CUR和SEEK_END依次為0,1和2.
簡言之:
fek(fp,100L,0);把文件內(nèi)部指針移動到離文件開頭100字節(jié)處;
fek(fp,100L,1);把文件內(nèi)部指針移動到離文件當(dāng)前位置100字節(jié)處;
fek(fp,-100L,2);把文件內(nèi)部指針退回到離文件結(jié)尾100字節(jié)處。
使用實例:
#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()/*修改覆蓋最后一個學(xué)生數(shù)據(jù)*/
{
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()函數(shù)
int fek(FILE *stream, long offt, int fromwhere);fek 用于二進(jìn)制方式打開的文件,移動文件讀寫指針位置.
fek(in,-1L,1); -- 文件流in, 零點為當(dāng)前指針位置,SEEK_CUR 就是 1, -1L -- 文件指針回退1個字節(jié)int fek( FILE *stream, long offt, int origin );
第一個參數(shù)stream為文件指針
第二個參數(shù)offt為偏移量,整數(shù)表示正向偏移,負(fù)數(shù)表示負(fù)向偏移
第三個參數(shù)origin設(shè)定從文件的哪里開始偏移,可能取值為:SEEK_CUR、 SEEK_END 或 SEEK_SET
SEEK_SET: 文件開頭
SEEK_CUR: 當(dāng)前位置
SEEK_END: 文件結(jié)尾
其中SEEK_SET,SEEK_CUR和SEEK_END和依次為0,1和2.
簡言之:
fek(fp,100L,0);把fp指針移動到離文件開頭100字節(jié)處;
fek(fp,100L,1);把fp指針移動到離文件當(dāng)前位置100字節(jié)處;
fek(fp,100L,2);把fp指針退回到離文件結(jié)尾100字節(jié)處
fek函數(shù),文件指針定位
fek(fp1,m,1);把文件內(nèi)部指針移動到離文件開頭m字節(jié)處
第二個參數(shù)m偏移量,第三個參數(shù)1表示當(dāng)前位置
它表示偏移量,如果m超過1行的長度,只會回到行首,你要將文件指針fp1上移兩行不能用這個函數(shù)
fek,是用于二進(jìn)制方式打開的文件,移動文件讀寫指針位置,通常文件打開后,讀寫位置按先后順序。fek函數(shù)是設(shè)置文件指針stream的位置。如果執(zhí)行成功,stream將指向以fromwhere為基準(zhǔn),偏移offt(指針偏移量)個字節(jié)的位置。如果執(zhí)行失敗(比如offt超過文件自身大小),則不改變stream指向的位置。fek函數(shù)和lek函數(shù)類似,但lek返回的是一個off_t數(shù)值,而fek返回的是一個整型。
fek的用法
int fek(FILE *stream, long offt, int fromwhere);
第一個參數(shù)file指針
第二個參數(shù)移動的偏移量
第三個參數(shù)移動到哪里
分別用3個宏
SEEK_SET 既0 文件開頭
SEEK_CUR 既1 文件當(dāng)前位置
SEEK_END 既2 文件結(jié)尾
但不推薦用數(shù)字 最好用宏
簡言之:
fek(fp,100L,SEEK_SET);把fp指針移動到離文件開頭100字節(jié)處;
fek(fp,100L,SEEK_CUR);把fp指針移動到離文件當(dāng)前位置100字節(jié)處;
fek(fp,100L,SEEK_END);把fp指針退回到離文件結(jié)尾100字節(jié)處。
此函數(shù)常用來計算流的長度:
int filesize = fek( fp, 0, SEEK_END );
fek( fp, 0, SEEK_SET );