Linux C语言经常使用库函数学习之——fseek()

fseek函数

  • 头文件:stdio.hweb

  • 函数原型:int fseek(FILE *stream, long offset, int fromwhere)
    函数功能:将指向文件的指针从fromwhere处(能够是头、尾、也能够是当前位置)移动offset个字节位置,简单点来讲就是让指向文件的指针从文件头部或者文件尾部或者当前位置移动必定的字节,移动的字节数也称偏移量用offset表示,当offset大于0时表示指针向右移动;当offset小于0时,指针向左移动。缓存

  • 参数说明svg

参数名 参数说明
FILE *stream 文件指针
long offset 偏移量:当该值大于0时表示向右偏移,小于0时表示向左偏移
int fromwhere 从何处开始偏移:该参数只有三个选项,不可随意填写。其中SEEK_SET表示文件开头;SEEK_CUR表示当前位置;SEEK_END表示文件末尾;
  • 应用举例:
/*================================================================
*   Copyright (C) 2019 Sangfor Ltd. All rights reserved.
*   
*   文件名称:fseek_test.c
*   创 建 者:zt
*   建立日期:2019年08月24日
*   描    述:
*
================================================================*/
#include <stdio.h>
#include <string.h>
#define FILE_PATH "./fseek_test.txt"
#define FILE_CONTENT "0123456789abc"
#define FILE_IS_NOT_EXIST NULL
#define SUCCESS 0
#define FAIL -1
#define BUFF_SIZE 1024
int main(int argc, char* argv[]){
    //定义函数返回值接收变量
    int ret = 0;
    //初始化数据缓冲区
    char buff[BUFF_SIZE] = {'\0'};
    //初始化文件指针为NULL,为了方便后面判断文件是否成功打开
    FILE *filep = NULL;
    //以只读方式打开文件
    filep = fopen(FILE_PATH, "r");
    //若文件不存在
    if(filep == FILE_IS_NOT_EXIST) {
        //已只写方式打开文件,若文件不存在则建立
        filep = fopen(FILE_PATH, "w");
        //向文件中写入内容
        ret = fwrite(FILE_CONTENT, sizeof(FILE_CONTENT), 1, filep);
        //若写文件失败
        if(ret < 0) {
            printf("write content to file fail!\n");
            return FAIL;
        }//endif
    }//endif
    fread(buff, 32, 1, filep);
    printf("origion file content is [%s]\n", buff);
    //清空缓存
    memset(buff, '\0', BUFF_SIZE);
    //将指向新建立文件的指针从文件开头向右侧移动5个字节位置
    fseek(filep, 9L, SEEK_SET);
//只读一个字节数据
#if 0
    fread(buff, 1, 1, filep);
    printf("[%s]\n", buff);
//读取指针后全部字节数据
#else
    fread(buff, 32, 1, filep);
    printf("[%s]\n", buff);
#endif
    fclose(filep);
    return 0;
}