【玩转Linux】文件的一些概念

news/2024/11/17 8:50:54/
  • (꒪ꇴ꒪ ),hello我是祐言
  • 博客主页:C语言基础,Linux基础,软件配置领域博主🌍
  • 快上🚘,一起学习!
  • 送给读者的一句鸡汤🤔:
  • 集中起来的意志可以击穿顽石!
  • 作者水平很有限,如果发现错误,可在评论区指正,感谢🙏

一、Linux中的文件存储

        在Linux中,文件是以字节序列的形式存储在存储设备(如硬盘、SSD等)上的。文件存储的方式取决于文件系统,Linux支持多种文件系统,常见的有Ext4、XFS、Btrfs等。

        文件系统是操作系统中负责管理文件和目录存储的机制。它定义了文件的组织结构、访问权限、文件名命名规则以及如何将文件存储在磁盘上的细节。

        文件系统将文件的内容和元数据(如权限、时间戳、文件大小等)存储在不同的数据结构中,并通过文件系统的逻辑管理器进行管理。当用户创建、读取或修改文件时,操作系统会使用文件系统的接口进行相应的操作。

        文件系统使用文件描述符(File Descriptor)来标识和管理打开的文件。文件描述符是一个整数值,由操作系统分配,每个打开的文件都有一个唯一的文件描述符。当应用程序需要读取或写入文件时,它会使用文件描述符来识别要操作的文件。

        文件的存储方式是由文件系统的数据结构和底层设备的存储方式共同决定的。文件系统会将文件数据存储在磁盘的不同位置,然后通过索引结构来记录这些位置,以便在需要时能够快速地读取和写入文件数据。

        总结起来,Linux中的文件是以字节序列的形式存储在存储设备上的,文件系统负责管理文件的组织和存储细节。文件系统使用文件描述符来标识打开的文件,通过索引结构来记录文件数据在磁盘上的位置,以实现高效的文件读写操作。不同的文件系统有不同的实现方式和特性,用户可以根据需求选择适合的文件系统来管理文件。

二、Linux中一个文件

  1. 文件元数据(Metadata):

    文件元数据包含了文件的属性信息,例如文件名、文件大小、创建时间、修改时间、访问时间等。这些信息由文件系统管理器维护,并记录在文件的索引节点中。当用户请求查看文件属性时,操作系统会返回这些元数据信息。
  2. 文件内容(Content):

    文件内容是文件实际的数据部分,它包含了文件的所有字节。文件内容由用户在文件中存储的数据组成,例如文本、图片、音频、视频等。当用户进行文件读取或写入操作时,实际操作的就是文件的内容。
  3. 文件索引节点(Inode):

    文件索引节点是文件系统中一个重要的数据结构,它存储了文件的元数据信息。每个文件都对应一个唯一的索引节点,索引节点中包含了文件的属性信息,以及指向文件内容在磁盘上存储位置的指针。通过索引节点,文件系统可以有效地定位文件的内容。
  4. 文件权限:

    文件权限用于控制对文件的访问权限,包括读取权限、写入权限和执行权限。每个文件都有一个文件所有者和文件所属组,文件权限可以分别指定给文件所有者、文件所属组和其他用户。文件权限是保护文件内容和元数据不被未经授权的用户访问或修改的重要机制。

        这些信息由操作系统和文件系统共同管理,确保文件的有效组织、存储和访问。

三、完整的文件构成

        在计算机中,一个完整的文件通常由文件头部、文件数据和文件尾部(如果有)组成。具体的文件结构和内容取决于文件的类型和格式。以下是一个简化的示例,用于展示一个包含文本的完整文件:

        文件名:example.txt

This is an example file.
It contains some text data.
This is a simple text file.
​
End of the file.

        在这个例子中,这个文件是一个简单的文本文件。它的内容是几行文本,没有文件头部和文件尾部,只包含文件数据部分。

        实际上,文件可以有不同的类型和格式,不同类型的文件可能有不同的结构和内容。例如,图像文件(如 BMP、JPEG、PNG)将以特定的文件头和数据块开始,用于描述图像的格式和像素数据;视频文件(如 AVI、MP4)将包含视频和音频的数据块;压缩文件(如 ZIP、RAR)将包含压缩后的文件数据以及用于恢复原始文件的信息。

        文件的结构和内容会根据文件类型和格式而变化,因此在处理文件时,需要了解特定文件类型的格式规范,以正确地解析和处理文件。

四、一些常见的文件格式

  1. JPEG(JPG):一种常见的图像文件格式,使用有损压缩算法,适用于存储照片和图像。它也有文件头和段来描述图像的信息。

  2. PNG:一种无损的图像文件格式,适用于存储透明图像和图形。它也有文件头和数据块来描述图像的信息。

  3. GIF:一种支持动画的图像文件格式,使用无损压缩算法。它采用文件头和数据块来描述动画帧和图像的信息。

  4. TIFF:一种多用途的图像文件格式,支持无损和有损压缩。它采用文件头和标签来描述图像的信息。

  5. WAV:一种音频文件格式,用于存储未经压缩的音频数据。它包含文件头和音频数据块。

  6. AVI:一种常见的视频文件格式,支持多种视频和音频编码。它采用文件头和数据块来描述视频和音频的信息。

  7. MP4:一种常用的视频文件格式,使用 H.264 或 H.265 等视频编码。它也有文件头和数据块来描述视频和音频的信息。

  8. BMP:对于像 BMP(Bitmap)这样的文件,前54个字节是文件头(File Header)和位图信息头(Bitmap Information Header)

        除了图像和音视频文件格式外,还有许多其他类型的二进制文件格式,如PDF(Portable Document Format)、DOCX(Microsoft Word文档)、XLSX(Microsoft Excel文档)等。每种文件格式都有自己特定的文件头和数据块,用于描述文件的结构和内容。解析和处理这些文件时,需要根据文件头的内容来正确解析文件,并提取所需的数据信息。

五、举例BMP格式

对于像 BMP(Bitmap)这样的文件,前54个字节是文件头(File Header)和位图信息头(Bitmap Information Header)。这些信息用于描述 BMP 文件的格式、尺寸、位深度等重要信息。

文件头(14字节):

  1. 2字节:文件类型,通常是"BM"表示Bitmap。

  2. 4字节:整个 BMP 文件的大小(以字节为单位)。

  3. 2字节:保留字段,一般设置为0。

  4. 2字节:保留字段,一般设置为0。

  5. 4字节:位图数据的偏移量,表示从文件开始到位图数据的字节偏移量。

位图信息头(40字节):

  1. 4字节:信息头的大小,即40字节。

  2. 4字节:图像宽度(以像素为单位)。

  3. 4字节:图像高度(以像素为单位)。

  4. 2字节:位平面数,一般为1。

  5. 2字节:每个像素的位数(位深度),即表示图像的颜色数。常见的有24位真彩色(RGB)和8位索引颜色。

  6. 4字节:压缩类型,常见的有0表示不压缩、1表示BI_RLE8压缩、2表示BI_RLE4压缩等。

  7. 4字节:图像数据大小,即位图数据部分的大小。

  8. 4字节:水平分辨率(每米像素数)。

  9. 4字节:垂直分辨率(每米像素数)。

  10. 4字节:实际使用的颜色数,对于24位真彩色,可设置为0表示使用所有颜色。

  11. 4字节:重要颜色数,对于24位真彩色,可设置为0表示所有颜色都重要。

        通过解析这些文件头和位图信息头的信息,可以获得 BMP 文件的基本属性,如图像宽度、高度、位深度等。然后根据位深度和压缩类型等信息,可以解析出图像的具体像素数据,并进一步处理和显示图像。

        更多C语言Linux系统相关文章,关注专栏:

   手撕C语言

            玩转linux

📢写在最后

  • 今天的分享就到这啦~
  • 觉得博主写的还不错的烦劳 一键三连喔~
  • 🎉感谢关注🎉

http://www.ppmy.cn/news/977645.html

相关文章

【VCS】(5)Fast RTL-level Verification

Fast RTL-level Verification General Coding GuidlinesLab --- simprofile$display() 输出彩色内容 前面的内容都是在说怎样进行仿真和验证,即如何使用 VCS 。 但是,仿真和验证是不是也有所讲究? 有没有一些标准来衡量设计代码和验证代码的质…

Windows环境Docker安装

目录 安装Docker Desktop的步骤 Docker Desktop 更新WSL WSL 的手动安装步骤 Windows PowerShell 拉取(Pull)镜像 查看已下载的镜像 输出"Hello Docker!" Docker Desktop是Docker官方提供的用于Windows的图形化桌面应用程序&#xff0c…

线程系列 7 - JUC高并发容器类

线程系列 7 - JUC高并发容器类 1、JUC高并发容器1.1、为什么需要JUC高并发容器1.2、什么是 JUC 高并发容器1.3、CopyOnWriteArrayList1.4、BlockingQueue1.4.1、阻塞队列的常用方法1.4.2、ArrayBlockingQueue1.4.3、LinkedBlockingQueue1.4.4、DelayQueue1.4.5、PriorityBlocki…

【数据结构和算法15】二叉树的实现

二叉树是这么一种树状结构:每个节点最多有两个孩子,左孩子和右孩子 重要的二叉树结构 完全二叉树(complete binary tree)是一种二叉树结构,除最后一层以外,每一层都必须填满,填充时要遵从先左后…

Java毕业设计-汽车出租系统【含源码、论文】

前言 汽车出租管理系统: 随着当今社会科学技术的高速发展,人民的生活水平不断的提高,自由行也开始盛行。有些人为了方便,选择汽车租赁的方式出行,因此汽车租赁成为一个极具市场潜力的行业。面对日趋发展的租赁市场&a…

【SpirngCloud】分布式事务解决方案

【SpirngCloud】分布式事务解决方案 文章目录 【SpirngCloud】分布式事务解决方案1. 理论基础1.1 CAP 理论1.2 BASE 理论1.3 分布式事务模型 2. Seata 架构2.1 项目引入 Seata 3. 强一致性分布式事务解决方案3.1 XA 模式3.1.1 seata的XA模式3.1.2 XA 模式实践3.1.3 总结 4. 最终…

vue中的动态路由怎么配置

如何定义动态路由? 如何获取传过来的动态参数?一.param方式 配置路由格式: /router/:id 传递的方式:在path后面跟上对应的值 传递后形成的路径:/router/123 1.定义路由 /在APp.vue中 <router-link :to/user/userId”replace>用户</router-link> //在index.js中…

vue之激光打印组件Laserprinter

组件功能 实现回单打印功能 #界面 #界面输入项 序号输入项输入形式是否必输是否可配置备注无