1、fseek()函数
库函数 fseek()用于设置文件读写位置偏移量。

#include <stdio.h>
int fseek(FILE *stream, long offset, int whence);
streamFILE 指针。
offset偏移量,以字节为单位
whence用于定义参数 offset 偏移量对应的参考值,该参数为下列其中一种(宏定义):
⚫ SEEK_SET:读写偏移量将指向 offset 字节位置处(从文件头部开始算);

⚫ SEEK_CUR:读写偏移量将指向当前位置偏移量 + offset 字节位置处,offset 可以为正、也可以为负,如果是正数表示往后偏移,如果是负数则表示往前偏移;
⚫ SEEK_END:读写偏移量将指向文件末尾 + offset 字节位置处,同样 offset 可以为正、也可以为负, 如果是正数表示往后偏移、如果是负数则表示往前偏移。
返回值:成功返回 0;发生错误将返回-1,并且会设置 errno 以指示错误原因。
示例代码:使用 fseek()调整文件读写位置
#include <stdio.h>
#include <stdlib.h>int main(void)
{FILE *fp = NULL;char rd_buf[100] = {0};char wr_buf[] = "Linux应用编程,开心快乐每一天!";int ret;/* 打开文件 */if (NULL == (fp = fopen("./test_file", "w+"))){perror("fopen error");exit(-1);}printf("文件打开成功!\n");/* 写文件 */if (sizeof(wr_buf) >fwrite(wr_buf, 1, sizeof(wr_buf), fp)){printf("fwrite error\n");fclose(fp);exit(-1);}printf("数据写入成功!\n");/* 将读写位置移动到文件头部 */if (0 > fseek(fp, 0, SEEK_SET)){perror("fseek error");fclose(fp);exit(-1);}/* 读文件 */if (sizeof(wr_buf) > (ret = fread(rd_buf, 1, sizeof(wr_buf), fp))){printf("fread error\n");fclose(fp);exit(-1);}printf("成功读取%d 个字节数据: %s\n", ret, rd_buf);/* 关闭文件 */fclose(fp);exit(0);
}

程序中首先调用 fopen()打开当前目录下的 test_file 文件,参数 mode 设置为"w+";接着调用 fwrite()将 wr_buf 缓冲区中的字符串数据"Linux应用编程,开心快乐每一天!"写入到文件中;由于调用了 fwrite(),所以此时的读写位置已经发生了改变,不再是文件头部,所以程序中调用了 fseek()将读写位置移动到了文件头,接着调用 fread()从文件头部开始读取刚写入的数据,读取成功之后打印出信息。
运行测试:

2、ftell()函数
库函数 ftell()可用于获取文件当前的读写位置偏移量。

#include <stdio.h>
long ftell(FILE *stream);
参数 stream 指向对应的文件,函数调用成功将返回当前读写位置偏移量;调用失败将返回-1,并会设置 errno 以指示错误原因。
示例代码:使用 fseek()和 ftell()函数获取文件大小

#include <stdio.h>
#include <stdlib.h>int main(void)
{FILE *fp = NULL;int ret;/* 打开文件 */if (NULL == (fp = fopen("./testApp.c", "r"))){perror("fopen error");exit(-1);}printf("文件打开成功!\n");/* 将读写位置移动到文件末尾 */if (0 > fseek(fp, 0, SEEK_END)){perror("fseek error");fclose(fp);exit(-1);}/* 获取当前位置偏移量 */if (0 > (ret = ftell(fp))){perror("ftell error");fclose(fp);exit(-1);}printf("文件大小: %d 个字节\n", ret);/* 关闭文件 */fclose(fp);exit(0);
}
首先打开当前目录下的 testApp.c 文件,将文件的读写位置移动到文件末尾,然后再获取当前的位置偏移量,也就得到了整个文件的大小。

编译测试:

Linux 应用编程之fseek()、ftell()函数相关推荐

  1. Linux服务器编程之:link()函数,ln命令,symlink,readlink,案例说明

    1 link()依赖头文件 #include<unistd.h> 2函数定义 int link(const char *oldpath,const char *newpath); 函数说明 ...

  2. Linux服务器编程之:utime()函数

    1.依赖的头文件 #include<sys/types.h> #include<utime.h> 2函数声明 int utime(const char *filename, c ...

  3. Linux服务器编程之:chown()函数,chown命令

    1.依赖的头文件 #include<unistd.h> 2.函数定义: //通过传入path的方式,改变和文件的拥有关系,如果他是一个符号链接,则跟踪它 int chown(const c ...

  4. linux网络编程之用select函数实现io复用(基于TCP)引发的思考

    1.基本概念 IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程.IO多路复用适用如下场合: (1)当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/ ...

  5. linux chown 函数用噶,Linux服务器编程之:chown()函数,chown命令

    1.依赖的头文件 #include 2.函数定义: //通过传入path的方式,改变和文件的拥有关系,如果他是一个符号链接,则跟踪它 int chown(const char *path, uid_t ...

  6. linux读取文件修改时间函数,Linux服务器编程之utime()函数修改文件存取时间

    Linux服务器编程之utime()函数修改文件存取时间 C语言utime()函数:修改文件的存取时间和更改时间 头文件: #include #include 定义函数: int utime(cons ...

  7. linux c编程之fcntl

    fcntl可实现对指定文件描述符的各种操作,其函数原型如下: int fcntl(int fd, int cmd, ... /* arg */ ); 其中,操作类型由cmd决定.cmd可取如下值: F ...

  8. linux C编程之makefile

    linux C编程之makefile 目的:       基本掌握了 make 的用法,能在Linux系统上编程. 环境:       Linux系统,或者有一台Linux服务器,通过终端连接.一句话 ...

  9. Linux网络编程之sockaddr与sockaddr_in,sockaddr_un结构体详细讲解

    Linux网络编程之sockaddr与sockaddr_in,sockaddr_un结构体详细讲解 (1)sockaddr struct sockaddr { unsigned  short  sa_ ...

最新文章

  1. 基于线段的激光雷达和单目联合曲面重建
  2. Python可变数据类型高效编程
  3. 【Python面试】 列举Python中的标准异常类?
  4. Arcgis Server初学笔记(一)
  5. R.I.P. Alan Turing(旧文搬运15.6.6)
  6. Java实现判断中文字符串长度
  7. Vue项目 chrome页面崩溃:喔唷 崩溃了, 并出现警告Forced reflow while executing JavaScript took Nms
  8. java.lang.IllegalStateException: Shutdown in progress
  9. ios闹钟铃声实现代码
  10. 关于错误“未能加载文件或程序集”的错误的若干处理办法——对GAC的简单应用
  11. windows下模拟鼠标点击和键盘输入
  12. DELMIA软件:机器人工作区运动包络功能介绍与创建方法
  13. 为什么机器学习之路没有捷径可走?
  14. 匿名内部类以及Lambda表达式(Java和C#)
  15. 2020总结 | 作为技术号主的一年!
  16. 计算机绘图说课视频,说课稿认识画图软件
  17. 用 Python 打扑克牌——炸金花
  18. 安装PS CC2019
  19. [OpenCV4] 湖南大学数字图像处理实验1
  20. 微信小程序踩坑记录 ------- canvas 生成带小程序码的微信朋友圈分享图

热门文章

  1. 联想台式主机拆机教程_联想 aio 520 拆机教程 ,全网最完整版,细节不放过,不看后悔...
  2. 第四章 向量组的线性相关性
  3. 数字音频总线A2B开发详解十二(A2B一Master板做音效处理-31段EQ,高中低音分频等)
  4. 加湿器工作原理与电路介绍(共19页pdf下载)附电路原理图(转)
  5. aida64注册信息已损坏_AIDA64 Extreme(硬件检测)
  6. autoit学习笔记---“While…WEnd”循环
  7. 计算机查看硬件win10,win10查看硬件配置_win10查看硬件详细配置
  8. 巨星mtv_沟通巨星:了解您的组织采用新技术方法的模型
  9. 一份MES系统整体解决方案
  10. 安居客二手房信息爬取(六安)