?
? ????? PHP ??? ???? ??? ?? ??
在頭文件<stdio.h>中定義 |
---|
int fseek(FILE * stream,long offset,int origin); |
將文件流的文件位置指示符設(shè)置為stream
指向的值offset
。
如果stream
以二進制模式打開,則新位置是offset
從文件開始處測量的字節(jié)(如果origin
是)SEEK_SET
,從當(dāng)前文件位置(如果origin
是)SEEK_CUR
,以及從文件結(jié)尾(如果origin
是)開始SEEK_END
。二進制流不需要支持SEEK_END
,特別是如果輸出額外的空字節(jié)。
如果stream
是在文本模式下打開,對于僅支持值offset
為零(這與任何工作origin
),并通過先前調(diào)用返回的值ftell
與同一文件(僅與工作相關(guān)的物流origin
的SEEK_SET
)。
如果stream
是面向廣域的,則應(yīng)用文本流和二進制流的限制(ftell
SEEK_SET允許使用結(jié)果,SEEK_SET和SEEK_CUR允許使用零偏移量,但不允許SEEK_END)。
除了更改文件位置指示符之外,還可以fseek
取消ungetc
文件結(jié)束狀態(tài)的效果并清除文件結(jié)束狀態(tài)(如果適用)。
如果發(fā)生讀取或?qū)懭脲e誤,則會ferror
設(shè)置stream()的錯誤指示符并且文件位置不受影響。
流 | - | 文件流進行修改 |
---|---|---|
抵消 | - | 將位置相對于原點移動的字符數(shù) |
起源 | - | 添加了偏移量的位置。它可以具有以下值之一:SEEK_SET,SEEK_CUR,SEEK_END |
0
一旦成功,否則非零值。
在寬流中尋找非終點位置之后,對任何輸出函數(shù)的下一次調(diào)用可能會使文件的其余部分不確定,例如通過輸出不同長度的多字節(jié)序列。
對于文本流,唯一有效的值offset
是0
(適用于任何origin
)和先前調(diào)用返回的值ftell
(僅適用于SEEK_SET
)。
POSIX允許在現(xiàn)有的文件結(jié)尾之外尋找。如果在此查找后執(zhí)行輸出,則從間隙讀取的數(shù)據(jù)將返回零字節(jié)。在文件系統(tǒng)支持的地方,這將創(chuàng)建一個稀疏文件。
fflush
如果有任何未寫入的數(shù)據(jù)(但是移位狀態(tài)是否恢復(fù)為實現(xiàn)定義),POSIX還要求fseek首先執(zhí)行。
帶有錯誤檢查的fseek。
#include <stdio.h>#include <stdlib.h> int main(void){ /* Prepare an array of f-p values. */ #define SIZE 5 double A[SIZE] = {1.,2.,3.,4.,5.}; /* Write array to a file. */ FILE * fp = fopen("test.bin", "wb"); fwrite(A,sizeof(double),SIZE,fp); fclose (fp); /* Read the f-p values into array B. */ double B[SIZE]; fp = fopen("test.bin","rb"); /* Set the file position indicator in front of third f-p value. */ if (fseek(fp,sizeof(double)*2L,SEEK_SET) != 0) { if (ferror(fp)) { perror("fseek()"); fprintf(stderr,"fseek() failed in file %s at line # %d\n", __FILE__,__LINE__-5); exit(EXIT_FAILURE); } } int ret_code = fread(B,sizeof(double),1,fp); /* read one f-p value */ printf("%.1f\n", B[0]); /* print one f-p value */ fclose(fp); return EXIT_SUCCESS;}
輸出:
3.0
C11標(biāo)準(zhǔn)(ISO / IEC 9899:2011):
7.21.9.2 fseek函數(shù)(p:336-337)
C99標(biāo)準(zhǔn)(ISO / IEC 9899:1999):
7.19.9.2 fseek函數(shù)(p:302-303)
C89 / C90標(biāo)準(zhǔn)(ISO / IEC 9899:1990):
4.9.9.2 fseek函數(shù)