【文件I/O】文件持久化

news2025/1/11 10:01:53

这篇文章详细讲解的是 理解在Linux操作系统中输入/输出(I/O)编程与文件操作的关系。

在计算机编程中,输入/输出编程(I/O 编程) 是一个重要的概念,指的是通过程序与外部世界(如用户输入、文件、设备等)进行数据交换的过程。文件操作是 I/O 编程中最常见的应用场景之一,通过文件操作可以对数据进行持久化存储

这篇文章也是I/O编程的最为基础的知识,我将会从 I/O 编程文件的分类与文件相关的 I/O 操作持久化数据的实现 等方面展开说明。

输入/输出编程的基础

什么是 I/O?

  • input 输入:将外部数据输入到程序中,例如键盘输入、文件读取、网络数据接收等。
  • output 输出:将程序数据输出到外部,例如打印到屏幕、写入文件、发送网络数据等。

I/O 的作用

  • I/O 编程的核心任务是 将程序的操作作用于某种 I/O 对象(如文件、设备、网络接口等)
  • 文件 是最常见的 I/O 对象之一,程序通过文件 I/O 操作实现数据的存储和读取。

I/O 编程中的“文件”

  • 在操作系统中,“文件”是一个广义的概念,指的是可以进行数据存储的抽象对象。
  • I/O编程 中的文件不仅仅指磁盘上的普通文本文件,还包括设备文件、管道文件、网络文件等。
文件的分类(7种文件类型)

在 Linux 操作系统中,文件分为以下几种类型:

文件类型描述
普通文件 -常见的文本文件、二进制文件、源代码文件等。
目录文件目录本质上也是一种文件,存储了目录下的文件列表及其元数据。
链接文件指向另一个文件的引用,可以是软链接(符号链接)或硬链接。
设备文件表示硬件设备,包括字符设备(如键盘)和块设备(如磁盘)。
管道文件用于进程间通信的文件,分为命名管道(FIFO)和匿名管道。
套接字文件用于网络通信的文件,表示网络连接的端点。
内存映射文件文件与内存直接映射,用于高效的文件读取和写入操作。
  • 文件的广义理解:
    • 本质:在 Linux 中,所有可以进行 I/O 操作的对象都可以看作文件。
    • 统一接口:文件、设备、网络等都可以通过统一的文件描述符和 I/O 系统调用进行访问。
对文件进行 I/O 操作

文件 I/O 的概念:
文件 I/O 指的是通过编程对文件进行 读(Read)写(Write) 的操作。通过文件 I/O,可以实现数据的持久化存储、文件内容的处理等。

文件 I/O 的基本操作
文件操作通常包括以下步骤:

  1. 打开文件:通过 open()fopen() 打开文件,获取文件描述符或文件指针。
  2. 读写文件
    • 读取文件:通过 read()fread() 从文件中获取数据。
    • 写入文件:通过 write()fwrite() 将数据写入文件。
  3. 关闭文件:通过 close()fclose() 关闭文件,释放资源。

文件操作的示例
使用 C 语言实现文件 I/O 操作:

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

int main() {
    // 打开文件进行写入
    FILE *file = fopen("example.txt", "w");
    if (file == NULL) {
        perror("Error opening file");
        return 1;
    }

    // 写入数据
    fprintf(file, "Hello, world!\n");
    fprintf(file, "This is a test file.\n");

    // 关闭文件
    fclose(file);

    // 打开文件进行读取
    file = fopen("example.txt", "r");
    if (file == NULL) {
        perror("Error opening file");
        return 1;
    }

    // 读取数据
    char buffer[256];
    while (fgets(buffer, sizeof(buffer), file) != NULL) {
        printf("%s", buffer);
    }

    // 关闭文件
    fclose(file);
    return 0;
}
  • 文件 I/O 的作用:
    • 数据存储:将程序运行过程中产生的数据存储到文件中,便于后续使用。
    • 数据读取:从外部文件中加载数据到程序中,作为程序的输入。
    • 数据共享:通过文件在不同程序间传递数据。
将数据保留(文件持久化)

什么是持久化?
持久化是指 将程序中的数据保存到外部存储介质(如磁盘文件)中,以便程序退出后数据仍然可以被访问

文件 I/O 和数据持久化的关系:

  • 文件 I/O 是实现数据持久化的主要手段。
  • 程序通过文件操作将数据写入文件,实现对数据的长期保存。

示例程序:将用户输入的数据保留到文件
任务:读取用户输入并将其保存到文件中:

#include <stdio.h>

int main() {
    // 打开文件进行追加写入
    FILE *file = fopen("log.txt", "a");
    if (file == NULL) {
        perror("Error opening file");
        return 1;
    }

    // 获取用户输入并写入文件
    char input[256];
    printf("Enter some text: ");
    fgets(input, sizeof(input), stdin);
    fprintf(file, "%s", input);

    // 关闭文件
    fclose(file);

    printf("Data saved to log.txt\n");
    return 0;
}
  • 输入/输出编程的本质
    • I/O 编程的目标是将程序的 I/O 功能作用于某种 I/O 对象(如文件)。
    • 文件是 I/O 编程的核心对象之一,通过文件操作可以实现数据的持久化和共享。
  • 文件的种类
    • 文件在 Linux 中有广义的定义,包括普通文件、设备文件、管道文件等。
  • 文件操作的意义
    • 文件 I/O 编程 是通过系统调用或库函数对文件进行读取和写入操作。
    • 文件 I/O 是实现数据持久化的主要手段,可以将程序运行时的数据保留到文件中。
  • 文件 I/O 编程的应用场景
    • 数据存储:如配置文件、数据库文件。
    • 数据读取:如加载程序输入、日志文件读取。
    • 数据共享:如通过文件在程序之间传递信息。

通过输入/输出编程,程序可以高效地操作文件,实现数据的保存和共享,从而扩展程序的功能和应用范围。

以上。仅供学习与分享交流,请勿用于商业用途!转载需提前说明。

我是一个十分热爱技术的程序员,希望这篇文章能够对您有帮助,也希望认识更多热爱程序开发的小伙伴。
感谢!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Angular由一个bug说起之十三:Cross Origin

跨域 想要了解跨域&#xff0c;首要要了解源 什么是源&#xff0c;源等于协议加域名加端口号 只有这三个都相同&#xff0c;才是同源&#xff0c;反之则是非同源。 比如下面这四个里&#xff0c;只有第4个是同源 而浏览器给服务器发送请求时&#xff0c;他们的源一样&#xff0…

【LeetCode Hot100 贪心算法】 买卖股票的最佳时机、跳跃游戏、划分字母区间

贪心算法 买卖股票的最佳时机买卖股票的最佳时机II跳跃游戏跳跃游戏II划分字母区间 买卖股票的最佳时机 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的…

MCANet: 基于多模态字幕感知的大语言模型训练无关视频异常检测

目录 摘要01 引言02 相关工作2.1 视频异常检测2.2 基于视频的大语言模型&#xff08;VLLMs&#xff09; 03 方法论3.1 问题定义3.2 MCANet3.3 图像字幕分支3.4 音频字幕分支3.5 基于LLM的异常评分3.6 视频-文本分数优化 04 实验4.1 数据集和评估指标4.2 实现细节4.3 定性结果4.…

为深度学习引入张量

为深度学习引入张量 什么是张量&#xff1f; 神经网络中的输入、输出和转换都是使用张量表示的&#xff0c;因此&#xff0c;神经网络编程大量使用张量。 张量是神经网络使用的主要数据结构。 张量的概念是其他更具体概念的数学概括。让我们看看一些张量的具体实例。 张量…

Taro+Vue实现图片裁剪组件

cropper-image-taro-vue3 组件库 介绍 cropper-image-taro-vue3 是一个基于 Vue 3 和 Taro 开发的裁剪工具组件&#xff0c;支持图片裁剪、裁剪框拖动、缩放和输出裁剪后的图片。该组件适用于 Vue 3 和 Taro 环境&#xff0c;可以在网页、小程序等平台中使用。 源码 https:…

[DO374] Ansible 配置文件

[DO374] Ansible 配置文件 1. 配置文件位置2. 配置文件3. Ansible 配置4. Ansible的Ad-hoc5. Ansible 模块6. playbook段落7. 任务执行后续8. Ansible 变量8.1 ansible 变量的定义8.1.1 主机变量8.1.2 主机组变量 8.2 vars的循环 9. Ansible Collection10. Ansible-galaxy 安装…

[程序设计]—代理模式

[程序设计]—代理模式&#x1f473; 本文章记录学习于——52.面向切面&#xff1a;AOP-场景模拟_哔哩哔哩_bilibili 最近闲来无事&#xff0c;在学习Spring的源码&#xff1a; 后面慢慢更新源码系列blog&#xff0c;希望多多关注&#x1f64f;&#x1f64f; 目前已经总结的b…

OSPF - 2、3类LSA(Network-LSA、NetWork-Sunmmary-LSA)

前篇博客有对常用LSA的总结 2类LSA&#xff08;Network-LSA&#xff09; DR产生泛洪范围为本区域 作用:  描述MA网络拓扑信息和网络信息&#xff0c;拓扑信息主要描述当前MA网络中伪节点连接着哪几台路由。网络信息描述当前网络的 掩码和DR接口IP地址。 影响邻居建立中说到…

景芯SOC设计实战

终身辅导、一对一辅导&#xff0c;手把手教您完成SoC全流程设计&#xff0c;从入门到进阶&#xff0c;带您掌握SoC芯片架构、算法、设计、验证、DFT、后端及低功耗全流程&#xff01;直播视频不定期升级&#xff01;让您快速超越同龄人&#xff01; 景芯团队主打文档服务器实战…

多云架构,JuiceFS 如何实现一致性与低延迟的数据分发

随着大模型的普及&#xff0c;GPU 算力成为稀缺资源&#xff0c;单一数据中心或云区域的 GPU 资源常常难以满足用户的全面需求。同时&#xff0c;跨地域团队的协作需求也推动了企业在不同云平台之间调度数据和计算任务。多云架构正逐渐成为一种趋势&#xff0c;然而该架构下的数…

如何获取文件的MIME类型

文章目录 1. 概念介绍2. 方法与类型2.1 使用方法2.2 常见类型3. 示例代码4. 内容总结我们在上一章回中介绍了"如何加载本地图片"相关的内容,本章回中将介绍如何获取文件类型.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章回中提到的文件类型是指MI…

【Uniapp-Vue3】computed计算属性用法及方法对比

如果我们想要将两个响应式变量进行某种运算&#xff0c;就可以使用computed计算属性。 比如下面这个例子中&#xff0c;输入名和姓合成全名&#xff0c;可以用直接显示的方法&#xff1a; 我们也可以使用computed属性&#xff1a; import {computed} from "vue"; le…

C#实现凸壳算法

凸壳计算代码: public static PointD[] calcConvexHull(PointD[] points) {// 按 x 坐标对点进行排序Array.Sort(points, (p1, p2) => p1.X.CompareTo(p2.X));// 创建下凸壳var lowerHull = new List<PointD>();foreach (var point in points){while (lowerHull.Co…

设计模式 行为型 状态模式(State Pattern)与 常见技术框架应用 解析

状态模式&#xff08;State Pattern&#xff09;是一种行为型设计模式&#xff0c;它允许对象在内部状态改变时改变其行为&#xff0c;使得对象看起来好像修改了它的类。这种设计模式的核心思想是将对象的状态和行为封装成不同的状态类&#xff0c;通过状态对象的行为改变来避免…

SAP SD学习笔记27 - 贩卖契约(框架协议)2 - 基本契约 - 金额契约(价值合同)

上一章讲了贩卖契约&#xff08;框架协议&#xff09;的概要&#xff0c;以及贩卖契约中最为常用的 基本契约 - 数量契约。 SAP SD学习笔记26 - 贩卖契约(框架协议)的概要&#xff0c;基本契约 - 数量契约-CSDN博客 本章继续讲SAP中的内容&#xff1a; - 基本契约 - 金额契约…

mysql之基本select语句 运算符 排序分页

1.SQL的分类 DDL:数据定义语言. CREATE ALTER DROP RENAME TRUNCATE DML: 数据操作语言. INSERT DELETE UPDATE SELECT 重中之重 DCL: 数据控制语言. COMMIT ROLLBACK SAVEPOINT GRANT REVOKE 2.SQL语言的规则与规范 1.基本规则 SQL可以在一行或多行,为了提高可…

Linux中SSH服务(二)

一、基于公私钥的认证&#xff08;免密登录&#xff09; 1、Windows免密登录Linux Windows推荐安装Cygwin软件&#xff1a;Cygwin 1.1Windows上面生成公私钥 之前已经生成过了&#xff0c;所以显示公私钥已存在 lovezywLAPTOP-AABHB5ED ~ $ ssh-keygen Generating public/pr…

.NET Core NPOI 导出图片到Excel指定单元格并自适应宽度

NPOI&#xff1a;支持xlsx&#xff0c;.xls&#xff0c;版本>2.5.3 XLS&#xff1a;HSSFWorkbook&#xff0c;主要前缀HSS&#xff0c; XLSX&#xff1a;XSSFWorkbook&#xff0c;主要前缀XSS&#xff0c;using NPOI.XSSF.UserModel; 1、导出Excel添加图片效果&#xff0…

NS2202X 系列 40V 输入 OVP 保护 IC

1 特性  最大输入电压&#xff1a; 40V  内部预设 2.1A 负载过流 OCP 保护  外置过流保护阈值可调节引脚&#xff0c;可悬空  外置 EN 使能控制引脚  内部预设 6V 输入过压 OVP 保护  输入 OVP 保护响应时间 20ns  内置 150 ℃过温…

Web前端基础知识(七)

要在JS中获取元素节点&#xff0c;需要使用DOM API提供的方法。 innerHTML&#xff1a;不仅会返回一个纯文本&#xff0c;还可以解析一下这个文本中的语意。 innerText: 忽略HTML标记。 举例&#xff1a; <body> <div id"box1">这是一个ID选择器标签…