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

  • (꒪ꇴ꒪ ),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.mzph.cn/news/7678.shtml

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

相关文章

怎样接入chatGPT

官网链接: OpenAI platform

Unity Coroutine 协程

Unity Coroutine 是一种在 Unity 引擎中实现异步编程的技术,它可以让你在多个帧中分段执行一个函数,而不是一次性地执行完毕。Coroutine 可以使用 yield 语句来暂停和恢复执行,从而实现一些复杂的逻辑和效果,如时间延迟、循环动画…

UE4/5C++多线程插件制作(十四、MTPAbandonable)

目录 MTPAbandonable h实现 cpp实现 MTPMarco.h 首先是异步任务的宏定义部分:

IDEA+SpringBoot +ssm+ Mybatis+easyui+Mysql求职招聘管理系统网站

IDEASpringBoot ssm MybatiseasyuiMysql求职招聘管理系统网站 一、系统介绍1.环境配置 二、系统展示1. 登录2.注册3.首页4.公司5.关于我们6.我的简历7.我投递的简历8.修改密码9. 管理员登录10.我的信息11.用户信息12.职位类别13. 职位列表14. 公司列表15. 日志列表 三、部分代码…

【Rust 基础篇】Rust 封装

导言 在 Rust 中,封装是一种面向对象编程的重要概念,它允许将数据和相关的方法组合在一起,形成一个独立的单元。通过封装,我们可以隐藏数据的实现细节,只暴露需要对外部使用的接口,从而提高代码的可维护性和安全性。本篇博客将详细介绍 Rust 中封装的概念,包含代码示例…

Visual Studio 2022 cmake配置opencv开发环境

1. 环境与说明 这里我用的是 widnows 10 64位,Visual Studio 用的 Visual Studio Community 2022 (社区版) 对于Android开发工程师来说,为什么要使用Visual Studio 呢 ? 因为在Visual Studio中开发调试OpenCV方便,可以开发调试好后&#xf…

Transformer+医学图像最新进展【2023】

Transformer主要用于自然语言处理领域。近年来,它在计算机视觉(CV)领域得到了广泛的应用。医学图像分析(MIA,Medical image analysis)作为机器视觉(CV,Computer Vision)的一个重要分支,也极大地受益于这一最先进的技术。 机构:新加坡国立大学机械工程系、中山大学智能系…

基于Eisvogel模板的Markdown导出PDF方法

Requirements 模板地址:Wandmalfarbe/pandoc-latex-template Pandoc:Pandoc官网 Latex环境:例如TexLive Pandoc参数 --template"模板存放位置" --listings --pdf-enginexelatex --highlight-style kate -V CJKmainfontSimSun -V C…

安装nvm管理node

1.首先卸载已存在的node cmd输入node提示:‘node’ 不是内部或外部命令,也不是可运行的程序或批处理文件。 2.安装nvm 安装地址 :Releases coreybutler/nvm-windows GitHub 本人选择1.1.7 输入nvm打印出了nvm的指令列表,说明…

SpringBoot整合JDBC

1. 创建一个新的Spring Boot项目或者使用现有的Spring Boot项目作为基础 2. 在项目的pom.xml文件中添加Spring Boot JDBC和MySQL依赖 打开pom.xml文件&#xff0c;添加以下依赖: <dependency><groupId>org.springframework.boot</groupId><artifactI…

IDEA+SpringBoot + Mybatis + Shiro+Bootstrap+Mysql资产设备管理系统

IDEASpringBoot Mybatis ShiroBootstrapMysql资产设备管理系统 一、系统介绍1.环境配置 二、系统展示1. 管理员登录2.用户新增3.用户设置4.岗位管理5. 审批节点6. 人员查询7. 组织设置8. 人员调整9.角色设置10.角色模块映射11.模块设置12.应用模块13.光纤交换机14.服务器15.网…

C++之文件操作

1.C文件操作 C中文件操作头文件:fstream。   文件类型&#xff1a;文件文件和二进制文件。 文件操作三大类&#xff1a;     ofstream 写操作     ifstream 读操作     fstream:读写操作 文件打开方式&#xff1a; 标志说明ios::in只读ios::out只写,文件不存在则…

大数据面试题:HBase读写数据流程

面试题来源&#xff1a; 《大数据面试题 V4.0》 大数据面试题V3.0&#xff0c;523道题&#xff0c;679页&#xff0c;46w字 参考答案&#xff1a; 1、写数据流程 1&#xff09;Client先访问zookeeper&#xff0c;获取hbase:meta表位于哪个Region Server。 2&#xff09;访…

SQL 常见函数整理 _ LTRIM/RTRIM (去除字符串首尾空字符)

LTRIM() 1. 用法 用于去除字符串左侧&#xff08;开头&#xff09;的空格或指定的字符。它返回一个新的字符串&#xff0c;其中左侧的空格或指定字符被删除。 2. 基本语法 LTRIM ( string )参数说明&#xff1a; string&#xff1a;必需&#xff0c;要去除空格或指定字符的字…

使用TensorFlow训练深度学习模型实战(上)

大家好&#xff0c;尽管大多数关于神经网络的文章都强调数学&#xff0c;而TensorFlow文档则强调使用现成数据集进行快速实现&#xff0c;但将这些资源应用于真实世界数据集是很有挑战性的&#xff0c;很难将数学概念和现成数据集与我的具体用例联系起来。本文旨在提供一个实用…

P1149火柴棒等式题解

P1149[NOIP2008 提高组] 火柴棒等式 题目描述 给你 n n n 根火柴棍&#xff0c;你可以拼出多少个形如 A B C ABC ABC 的等式&#xff1f;等式中的 A A A、 B B B、 C C C 是用火柴棍拼出的整数&#xff08;若该数非零&#xff0c;则最高位不能是 0 0 0&#xff09;。用…

详解Mybatis查询之resultType返回值类型问题【4种情况】

编译软件&#xff1a;IntelliJ IDEA 2019.2.4 x64 操作系统&#xff1a;win10 x64 位 家庭版 Maven版本&#xff1a;apache-maven-3.6.3 Mybatis版本&#xff1a;3.5.6 文章目录 引言一、查询单行数据返回单个对象二、查询多行数据返回对象的集合三、 查询单行数据返回Map[Key,…

STN:Spatial Transformer Networks

1.Abstract 卷积神经网络缺乏对输入数据保持空间不变的能力&#xff0c;导致模型性能下降。作者提出了一种新的可学习模块&#xff0c;STN。这个可微模块可以插入现有的卷积结构中&#xff0c;使神经网络能够根据特征图像本身&#xff0c;主动地对特征图像进行空间变换&#x…

15. 三数之和

题目描述 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 **注意&#xff1a;**答案中不可以包含重复的三…

Maven学习笔记

Maven学习笔记 一、MAVEN基础1.1、Maven作用1.2、Maven基础概念1.2.1、仓库1.2.2、坐标1.2.2、仓库配置 1.3、 手动写一个maven程序1.4、依赖管理1.5、生命周期与插件1.5.1、构建生命周期1.5.2、插件 一、MAVEN基础 1.1、Maven作用 Maven的本质是一个项目管理工具&#xff0c…