当前位置: C语言 -- 标准库 -- <stdio.h> -- fseek

fseek函数


概要:
#include <stdio.h>
int fseek(FILE *stream, long int offset, int whence);

描述:

该函数为参数stream指向的流设置文件位置指示符。如果发生读写错误,将会设置错误指示符,fseek函数调用失败。

对于二进制流,新位置(从文件开头开始以字符为单位)通过将参数offset加上参数whence指定的位置来获得。如果参数whenceSEEK_SET,指定的位置为文件开头;如果参数whenceSEEK_CUR,指定的位置为当前位置;如果参数whenceSEEK_END,指定的位置为文件末尾。二进制流不需要有意义地支持whence值为SEEK_ENDfseek函数调用。

对于文本流,参数offset的值应为0或者早期成功调用ftell函数(流关联的文件相同。)的返回值,并且whence的值应为SEEK_SET

成功调用fseek函数会消除ungetc函数对流的影响,清除文件末尾指示符,并建立新位置。如果对一个更新流成功调用fseek函数,下一步操作可以是输入操作,也可以是输出操作。


参数:
FILE *stream

FILE类型指针,指向一个打开的流。

long int offset

偏移值。对于二进制文件,是相对于参数whence的偏移值;对于文本文件,该值应为0或者早期成功调用ftell函数的返回值。

int whence

偏移相对位置。

ISO/IEC 9899:2018标准<stdio.h>头文件定义了三个偏移相对位置,具体如下所示:

描述
SEEK_CUR 文件当前位置。
SEEK_END 文件末尾位置。
SEEK_SET 文件开头位置。

返回值:

如果调用成功,函数返回0;如果调用失败,函数返回非0值。


范例:
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
/*函数fseek范例*/

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    FILE *pFile;
    int ch;

    /*创建文件。*/
    pFile = fopen("gch.bin", "wb+");
    if(!pFile)
    {
        perror("Error");
        exit(EXIT_FAILURE);
    }
    
    /*写入数据。*/
    fputs("Hello world", pFile);
    
    /*设置文件位置指示符。*/
    fseek(pFile, -5L, SEEK_CUR);
    
    /*输出指定位置后的文件内容。*/
    while((ch=fgetc(pFile)) != EOF)
        putchar(ch);
    
    /*关闭文件。*/
    fclose(pFile);

    return 0;
}


输出:

world


相关内容:
ftell 获取流当前位置的函数。
rewind 将流位置设置为文件开头的函数。