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

这篇文章详细讲解的是 理解在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.rhkb.cn/news/505724.html

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

相关文章

解决idea中无法拖动tab标签页的问题

1、按 Ctrl Alt S 打开设置&#xff0c;找到路径 File | Settings | Appearance & Behavior | Appearance 2、去掉勾选 Drag-and-drop with Alt pressed only 即可

六、Angular 发送请求/ HttpClient 模块

一、应用 HttpClient 模块 angular/common/http 中的 HttpClient 类基于浏览器提供的 XMLHttpRequest 接口。要想使用 HtpClient 模块&#xff0c;就要先导入 Anqular 的 HttpClientModule。大多数 Web 应用程序都会在根模块 AppModule 中导入它。 编辑 src/app/app.module.ts…

基于单片机的无线智能窗帘控制器的设计

摘 要 : 本文以单片机为控制核心 , 基于 PT2262/ 2272 无线收发模块 , 实现了窗帘的无线远程智能控制 . 该控制器通过高频无线收发模块实现了遥控窗帘的开合控制; 根据外部光线强弱实现自动开关窗帘 ; 根据设定时间自动完成开关过程; 通过语音播报当前环境温湿度信息以…

android刷机

android ota和img包下载地址&#xff1a; https://developers.google.com/android/images?hlzh-cn android启动过程 线刷 格式&#xff1a;ota格式 模式&#xff1a;recovery 优点&#xff1a;方便、简单&#xff0c;刷机方法通用&#xff0c;不会破坏手机底层数据&#xff0…

Vivado中Tri_mode_ethernet_mac的时序约束、分析、调整——(一)时序约束的基本概念

1、基本概念 推荐阅读&#xff0c;Ally Zhou编写的《Vivado使用误区与进阶》系列文章&#xff0c;熟悉基本概念、tcl语句的使用。 《Vivado使用误区与进阶》电子书开放下载&#xff01;&#xff01; 2、Vivado中的语法例程 1&#xff09;语法例程 约束的语句可以参考vivado…

设计模式 行为型 责任链模式(Chain of Responsibility Pattern)与 常见技术框架应用 解析

责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为型设计模式&#xff0c;它允许将请求沿着处理者链进行发送。每个处理者对象都有机会处理该请求&#xff0c;直到某个处理者决定处理该请求为止。这种模式的主要目的是避免请求的发送者和接收者之间…

ubuntu 20.04 安装docker--小白学习之路

更新包 sudo apt-get update # 安装需要的软件包以使apt能够通过HTTPS使用仓库 sudo apt-get install ca-certificates curl gnupg lsb-release 使用清华大学源 # 添加Docker官方的GPG密钥 curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu/gpg | sudo…

Linux之线程池与单例模式

目录 线程池 线程池代码 单例模式 饿汉模式单例模式 懒汉模式单例模式 在前几期&#xff0c;我们已经学习了多线程的创建和控制&#xff0c;学习了多线程中的同步和互斥&#xff0c;学习了多线程中的条件变量和信号量&#xff0c;基于此我们实现了基于阻塞队列和基于环形队…

The Dedicated Few (10 player)

The Dedicated Few (10 player) 少数精锐&#xff08;10人&#xff09; &#xff1a;以少于9人的阵容击败纳克萨玛斯的所有首领&#xff08;10人&#xff09; 历时2小时做完了&#xff0c;不容易啊&#xff0c;别人可以的咱也可以。 World of Warcraft [CLASSIC][80猎人][G…

List ---- 模拟实现LIST功能的发现

目录 listlist概念 list 中的迭代器list迭代器知识const迭代器写法list访问自定义类型 附录代码 list list概念 list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。list的底层是双向链表结构&#xff0c;双向链表中每个元素…

vscode支持ssh远程开发

文章目录 一、生成ssh使用的公钥/密钥对二、使用vscode通过ssh连接服务器1.安装插件2.配置文件3.连接服务器4.新建文件夹&#xff0c;存放不同的任务 三、使用scp命令与服务器互传文件、文件夹1.检查Windows 系统是否支持scp命令2.在Windows系统本地的电脑向服务器传输文件、文…

Jmeter-压测时接口如何按照顺序执行

Jmeter-压测时接口如何按照顺序执行-临界部分控制器 在进行压力测试时&#xff0c;需要按照顺序进行压测&#xff0c;比如按照接口1、接口2、接口3、接口4 进行执行 查询结果是很混乱的&#xff0c;如果请求次数少&#xff0c;可能会按照顺序执行&#xff0c;但是随着次数增加…

day02-前端Web-JavaScript

目录 1. JS介绍2. 引入方式2.1 介绍2.2 演示 3. 基础语法3.1 书写规范3.2 变量3.2.1 let3.2.2 const3.2.3 注意 3.3 数据类型3.4 运算符3.4.1 运算符3.4.2 类型转换 3.5 流程控制语句 4. 函数4.1 格式一4.2 格式二 5. JS对象5.1 基本对象5.1.1 Array对象5.1.1.1 语法格式5.1.1.…

有收到腾讯委托律师事务所向AppStore投诉带有【水印相机】主标题名称App的开发者吗

近期&#xff0c;有多名开发者反馈&#xff0c;收到来自腾讯科技 (深圳) 有限公司委托北京的一家**诚律师事务所卞&#xff0c;写给AppStore的投诉邮件。 邮件内容主要说的是&#xff0c;腾讯注册了【水印相机】这四个字的商标&#xff0c;所以你们这些在AppStore上的app&…

2024年度漏洞态势分析报告,需要访问自取即可!(PDF版本)

2024年度漏洞态势分析报告&#xff0c;需要访问自取即可!(PDF版本),大家有什么好的也可以发一下看看

moviepy 将mp4视频文件提取音频mp3 - python 实现

DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;会员享有 百种数据集&#xff0c;持续增加中。 需要更多数据资源和技术解决方案&#xff0c;知识星球&#xff1a; “DataBall - X 数据球(free)” -------------------------------------------------------------…

算法(二)——一维差分、等差数列差分

文章目录 一维差分、等差数列差分一维差分例题&#xff1a;航班预订统计 等差数列差分例题&#xff1a;三步必杀例题&#xff1a;Lycanthropy 一维差分、等差数列差分 一维差分 差分解决的是 区间修改&#xff08;更新&#xff09;问题&#xff0c;特别是多次区间修改问题&…

深度学习笔记11-优化器对比实验(Tensorflow)

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目录 一、导入数据并检查 二、配置数据集 三、数据可视化 四、构建模型 五、训练模型 六、模型对比评估 七、总结 一、导入数据并检查 import pathlib,…

FreeROTS学习 内存管理

内存管理是一个系统基本组成部分&#xff0c;FreeRTOS 中大量使用到了内存管理&#xff0c;比如创建任务、信号量、队列等会自动从堆中申请内存&#xff0c;用户应用层代码也可以 FreeRTOS 提供的内存管理函数来申请和释放内存 FreeRTOS 内存管理简介 FreeRTOS 创建任务、队列…

【设计模式】介绍常见的设计模式

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 文章目录 ✨ 介绍一下常见的设计模式✨ Spring 中常见的设计模式 这期内容主要是总结一下常见的设计模式&#xff0c;可…