【Linux C】fseek函数使用小结

0x00 前言

演示使用的Linux版本(#cat /etc/issue):Ubuntu 18.04.6 LTS \n \l

最后更新日期:2023.7.17

0x01 fseek函数使用小结

1.函数描述

设置stream文件的位置指针偏移到指定位置1

2.声明

#include <stdio.h>
int fseek( FILE *stream, long offset, int origin );

参数:
stream:这是指向 FILE 对象的指针,该 FILE 对象标识了流。
offset:相对 origin 偏移的字节数。
origin:起始位置 。它为指定的下列值之一: SEEK_SETSEEK_CURSEEK_END

选项说明
SEEK_SET当前位置为文件的开头
SEEK_CUR当前位置为文件指针的位置
SEEK_END当前位置为文件的末尾

返回值:
成功时为 ​0​ ,否则为非零。

3.实例

该例实现功能为:从a文件复制其全部内容,然后覆写到b文中,最后再将一个字符串"hello word!"内容追加到b文件中。

#include <stdio.h>
#include<string.h>int main(int argc, char* argv[])
{int num = 0;int count = 0;char buffer[1024] = {0};char str[1024] = "hello word!";FILE* source_fd;FILE* target_fd;if(argc != 3){printf("Usage:copy Sourcefile Targetfile\n");return -1;}if(!(source_fd = fopen(*(argv + 1), "rb"))){//二进制读取文件内容printf("Source file open error!\n");return -2;}if(!(target_fd = fopen(*(argv + 2), "wb"))){ //文件清空,再二进制写入新的数据,若不想清空文件,第二参数写"ab"变为追加方式printf("Target file open error!\n");return -3;}num = fread(buffer, sizeof(char), sizeof(buffer), source_fd);fseek(target_fd, 0, SEEK_SET);if(fwrite(buffer, sizeof(char), strlen(buffer), target_fd) != num){printf("Target file write buffer error!\n");return -4;}fseek(target_fd, strlen(buffer), SEEK_SET);if(fwrite(str, sizeof(char), strlen(str), target_fd) != strlen(str)){printf("Target file write str error!\n");return -5;}fclose(source_fd);fclose(target_fd);return 0;
}

当前目录下有a、b两个文件,其中a文件有内容如下,b文件内容为空:
a:
在这里插入图片描述

b:
在这里插入图片描述

gcc编译程序并运行:
在这里插入图片描述
此时查看b文件:
在这里插入图片描述

可以看到覆写成功。此时若我们将代码中的第二个fseek(target_fd, strlen(buffer), SEEK_SET);改成fseek(target_fd, 4, SEEK_SET);也就是将文件位置指针偏移4个字节(小于a内容长度),再编译运行则b文件内容如下:
在这里插入图片描述

可以看到这次的修改将从第4个字节后开始覆写字符串"hello word!"内容。

以上。


  1. https://www.apiref.com/cpp-zh/c/io/fseek.html ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/26641.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ceph安装部署

Ceph 简介 存储基础 单机存储设备 单机存储的问题 分布式存储的类型 分布式存储&#xff08;软件定义的存储 SDS&#xff09; Ceph 架构 Ceph 核心组件 ​编辑 Pool中数据保存方式支持两种类型 OSD 存储后端 Ceph 数据的存储过程 Ceph 集群部署 基于 ceph-deploy …

Zookeeper集群

Zookeeper集群 一、Zookeeper 概述Ⅰ、Zookeeper 定义&#xff1a;Ⅱ、Zookeeper 工作机制Ⅲ、Zookeeper 特点Ⅳ、Zookeeper 数据结构Ⅴ、Zookeeper 应用场景Ⅵ、Zookeeper 选举机制 二、部署 Zookeeper 集群Ⅰ、安装前准备Ⅱ、安装Zookeeper 三、部署kafka 集群Ⅰ、下载安装包…

Fiddler抓包使用简介

目录 Fiddler简介 请求抓包 抓取PC端HTTPS请求 抓取移动端请求 请求查看 发送请求 Mock接口 断点调试 弱网模拟 请求重放 修改HOSTS 总结&#xff1a; Fiddler简介 Fiddler是一款免费的Windows平台的抓包工具&#xff0c;功能强大&#xff0c;使用简单。Fiddler抓…

IDEA运行TOMCAT出现404

就这种问题&#xff0c;每个人的原因都不一定一样&#xff0c;我出现这种问题的解决方法在这里记录一下。顺便把我的配置记录一下。 除了本文的问题&#xff0c;还有可能是默认打开的文件名错了&#xff0c;或者端口被占用。 软件版本IDEA2023 TOMCAT9 亲测&#xff1a;IDE…

C语言进阶之程序环境和预处理

程序环境和预处理 1. 程序的翻译环境和执行环境2. 详解编译链接2.1 翻译环境2.2 编译的几个阶段2.3 运行环境 3. 预处理详解3.1 预定义符号3.2 #define3.2.1 #define 定义标识符3.2.2 #define 定义宏3.2.3 #define 替换规则3.2.4 #和##3.2.5 带副作用的宏参数3.2.6 宏和函数对比…

「网络编程」应用层协议_ HTTPS协议学习及原理理解

「前言」文章内容大致是应用层协议的HTTPS协议讲解&#xff0c;续上篇HTTP协议。 「归属专栏」网络编程 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、HTTPS协议介绍二、什么是"加密"三、为什么要加密四、常见的加密方式五、数据摘要 && 数据指纹六、…

STM32 Proteus仿真可设置时间红绿灯-0075

STM32 Proteus仿真可设置时间红绿灯-0075 Proteus仿真小实验&#xff1a; STM32 Proteus仿真可设置时间红绿灯-0075 功能&#xff1a; 硬件组成&#xff1a;STM32F103C6单片机 74HC595串入并出芯片4个2位数码管显示十字路口红绿灯时间多个按键 1.包含机动车指示灯(红、黄、…

JVM类加载

1.什么是类加载 类加载子系统只是负责加载class字节码文件将类信息放至方法区中&#xff0c;至于是否可以运行&#xff0c;是执行引擎负责的事情。 2.类加载的过程 2.1加载 IO读取字节码文件 为每个类创建一个Class类的对象 将此对象存储在方法区中 2.2链接 2.2.1验证 验证…

noSQL的小练习

目录 Redis&#xff1a; 1、 string类型数据的命令操作&#xff1a; 2、 list类型数据的命令操作&#xff1a; 3、 hash类型数据的命令操作&#xff1a; MongoDB&#xff1a; 1. 创建一个数据库 名字grade 2. 数据库中创建一个集合名字 class 3. 集合中插入若…

IIS 部署的应用禁用HTTP TRACE / TRACK方法【原理扫描】

远程Web服务器支持TRACE和/或TRACK方法。 TRACE和TRACK是用于调试Web服务器连接的HTTP方法。 直接在网站Web.config文件中进行如下操作&#xff1a;在Web.config中的<system.webServer>节点内添加以下配置即可&#xff1a; <security> <requestFiltering> &…

Java阶段五Day07

Java阶段五Day07 文章目录 Java阶段五Day07问题解析dubbo和nacos Dubbo负载均衡负载均衡介绍准备一个负载均衡的环境Dubbo负载均衡策略配置负载均衡的方式dubbo配置负载均衡优先级微服务阶段性架构 Spring Boot Starter自定义配置准备一个starter案例项目Spring框架版本迭代案例…

SVR算法简介及与其它回归算法的关系

目录 参考链接 有人可以帮助我理解支持向量回归技术和其他简单回归模型之间的主要区别是什么 支持向量回归找到一个线性函数&#xff0c;表示误差范围 (epsilon) 内的数据。也就是说&#xff0c;大多数点都可以在该边距内找到&#xff0c;如下图所示 这意味着 SVR 比大多数其…