【Linux C】fseek函数使用小结

这篇具有很好参考价值的文章主要介绍了【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:
【Linux C】fseek函数使用小结,linux,c语言,数据库

b:
【Linux C】fseek函数使用小结,linux,c语言,数据库

gcc编译程序并运行:
【Linux C】fseek函数使用小结,linux,c语言,数据库
此时查看b文件:
【Linux C】fseek函数使用小结,linux,c语言,数据库

可以看到覆写成功。此时若我们将代码中的第二个fseek(target_fd, strlen(buffer), SEEK_SET);改成fseek(target_fd, 4, SEEK_SET);也就是将文件位置指针偏移4个字节(小于a内容长度),再编译运行则b文件内容如下:
【Linux C】fseek函数使用小结,linux,c语言,数据库

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

以上。


  1. https://www.apiref.com/cpp-zh/c/io/fseek.html ↩︎文章来源地址https://www.toymoban.com/news/detail-589784.html

到了这里,关于【Linux C】fseek函数使用小结的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用Linux远程连接OpenGauss数据库的步骤和方法

    openGauss是一款开源关系型数据库管理系统,采用木兰宽松许可证v2发行。openGauss内核深度融合华为在数据库领域多年的经验,结合企业级场景需求,持续构建竞争力特性. 结合cpolar 内网穿透工具,即可实现远程访问本地openGauss,实现远程访问,下面介绍从Linux安装到远程访问的方式

    2024年02月07日
    浏览(42)
  • SQLite3数据库在Linux下的安装+卸载+基本使用

    SQLite是一个进程内的轻量级嵌入式数据库,它的数据库就是一个文件,实现了自给自足、无服务器、零配置的、事务性的SQL数据库引擎。它是一个零配置的数据库,这就体现出来SQLite与其他数据库的最大的区别:SQLite不需要在系统中配置,直接可以使用。且SQLite不是一个独立

    2024年02月03日
    浏览(75)
  • 在Linux平台下使用.NET Core访问Access数据库读取mdb文件数据

    今天有群友在群里问 C# 能不能在 Linux 下访问 Access数据库 ? 我觉得这很有趣,因此研究折腾了一下,也因为很久没有写博文了,所以特意上来写博文分享经验。 操作系统: Ubuntu 22.04.3 LTS (Jammy) 开发工具: Visual Studio 2022 (17.8.0) 运行时版本: .NET Runtime 8.0 依赖库: unixodbc 、

    2024年02月05日
    浏览(42)
  • 【Socket】Linux下UDP Socket的基本流程以及connect、bind函数的使用(C语言实现)

    Socket的原意是“插座”,在计算机通信领域,socket 被翻译为“套接字”。 Socket通信主要有两个类型:TCP、UDP。 TCP通信,是一个有序的、可靠的、面向连接的通信方式。用数据流的方式传递信息。 UDP通信,是无连接的、不保证有序到达的、但具有较好的实时性、能够高速传输

    2024年02月13日
    浏览(34)
  • Linux使用宝塔面板安装MySQL结合内网穿透实现公网连接本地数据库

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击跳转到网站】 前言 宝塔面板的简易操作性,使得运维难度降低,简化了Linux命令行进行繁琐的配置,下面简单几步,通过宝塔面板+cpolar即可快速搭建一个mysql数据库服务并且实现公

    2024年04月12日
    浏览(55)
  • 【Linux OS】华为openEuler操作系统与openGauss数据库安装及使用入门

    EulerOS 是华为自主研发的服务器操作系统,支持六种处理器架构:x86,Arm,RISC—V,LoongArch,SW64和Power,能够满足客户从传统IT基础设施到云计算服务的需求。 openEuler是EulerOS的开源社区版本。 官网OS镜像下载地址:https://www.openeuler.org/zh/download/ 推荐下载LTS版,当前最新版为:

    2024年02月08日
    浏览(47)
  • Linux之实现Apache服务器监控、数据库定时备份及通过使用Shell脚本发送邮件

    目录  一、Apache服务器监控 为什么要用到服务监控? 实现Apache服务器监控 二、数据库备份 为什么要用到数据库备份? 实现数据库备份 三、Shell脚本发送邮件 为什么要用使用Shell脚本发送邮件? 实现Shell脚本发送邮件 在Linux中监控Apache服务器是非常重要的,原因如下: 保证

    2024年04月15日
    浏览(74)
  • 在虚拟机linux系统centos中安装oracle11gR2,并使用plsql工具连接使用数据库

    1.X工具,我使用的是Xftp,Xshell和Xmanager,也可以选用其他相同类型的工具 2.oracle安装包,我选用的是oracle11gR2,其他版本仅供参考 3.plsql工具 需要使用Xshell使虚拟机脸上Xmanager打开图形化界面,具体步骤如下: 1.打开虚拟机,登录 2.使用Xshell连接虚拟机         打开Xshell,创建

    2024年02月15日
    浏览(59)
  • MySQL笔记——MySQL数据库介绍以及在Linux里面安装MySQL数据库,对MySQL数据库的简单操作,MySQL的外接应用程序使用说明

    MySQL笔记——MySQL数据库介绍以及在Linux里面安装MySQL数据库,对MySQL数据库的简单操作,MySQL的外接应用程序使用说明 MySQL笔记——表的分组查询、表的分页查询、表的约束、数据库设计 MySQL案例——多表查询以及嵌套查询 MySQL笔记——数据库当中的事务以及Java实现对数据库进

    2024年01月16日
    浏览(75)
  • 【MySQL】数据库基本知识小结

    哈喽大家好,我是阿Q,今天我们来总结一下【MySQL】 入门的必备知识点吧~ 数据库 :DataBase 简称 DB,就是信息的集合或者说数据库是由数据库管理系统管理的数据的集合。 数据库管理系统 :DataBase Management System 简称 DBMS,是一种操纵和管理数据库的大型软件,通常用于建立

    2024年02月09日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包