Linux 基础IO(2)磁盘文件

这篇具有很好参考价值的文章主要介绍了Linux 基础IO(2)磁盘文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.磁盘文件

Linux 基础IO(2)磁盘文件,linux
Linux 基础IO(2)磁盘文件,linux

  1. 扇区:整个盘片分成不同的区块,每一个区块就是一个扇区。
    扇区是磁盘IO的基本单位,一般为512Byte4KB,一般磁盘都是512Byte
  2. 磁道:同一半径一圈区域是磁道

磁盘读写依靠的是磁头,盘面高速旋转,磁头来回摆动。
首先,确定在那个盘面,也就是磁头 head
其次,磁头来回摆动定位磁道 cylinder
然后,盘面高度旋转定位扇区 sector
这样在就可以定位在哪个盘面,哪个磁道的哪个扇区
这样的方法叫做CHS定址法

2.文件系统

扇区是磁盘IO的基本单位,把整个磁盘想象成一个数组,每个元素就是一个扇区,节点下标就是这个扇区的编号
Linux 基础IO(2)磁盘文件,linux
OS认为一次访问一个扇区,单位太小了,所以操作一次读取4KB的数据块(8个扇区)
Linux 基础IO(2)磁盘文件,linux
同时,我们把这种地址叫做逻辑区块地址(LBA)

LBA地址怎么转换成CHS呢
首先,设当前LBA = n, 将LBA地址转换为扇区编号区间[8 * n, 8 * n + 7]
扇区编号转CHS:

  1. 盘面c = x / 一个盘面的扇区个数 x %= 一个盘面的扇区个数
  2. 在哪个磁道:x / 一个磁道上扇区个数
  3. 在哪个扇区 : x % 一个磁道上扇区个数

我们使用笔记本/台式机经常会听到分区,但实际上我们的硬盘不会被分成几块,只是划分成了几个区域
Linux 基础IO(2)磁盘文件,linux
Linux 基础IO(2)磁盘文件,linux

1.Boot Block(启动块):它的大小是确定的,即1KB,用来存储磁盘分区信息和启动信息。Boot Block的主要作用是引导计算机启动,将操作系统载入内存中
2. inode Table:存放文件属性,如文件大小,所有者,最近修改时间等
3. inode Bitmap:比特位的位置表示第几个inode,比特位的内容表示该inode是否被使用
4. Data blocks:存放文件内容
5. Block Bitmap:比特位的位置表示块号,比特位的内容表示对应的块是否被使用
6. GDT(Group Descriptor Table):块组描述符,描述块组属性信息,管理分组
7. Super Block:存放文件系统本身的结构信息,管理分区

linux系统中每个文件都有它对应的inode,OS只认inode。每个inode占128Byte, inode分区内唯一。
linux中,文件内容和属性分开存储,文件名不属于文件属性。
目录本身也是一个文件,拥有自己的inode和数据块,数据块中保存的是当前目录下的文件名和文件inode的对应关系。
对一个文件,进行增删查改都和文件所处的目录有关系,所以在内核中,都要逆向递归般得到/,从根目录开始进行路径解析
所以之前权限时讲到目录的权限,如果没有r,就无法读取目录下的文件,本质就是无法访问目录数据块的内容,如果没有w,就无法修改当前目录下的文件,因为无法增加或删除或更改存储在目录数据块中的文件名和inode的映射关系。

3.软硬链接

1.软链接

Linux 基础IO(2)磁盘文件,linux
软链接本质是一个独立的文件,有独立的inode和数据块,软链接的内容中存放着目标文件的路径,相当于快捷方式
可以为目录建立软连接
Linux 基础IO(2)磁盘文件,linux

2.硬链接

Linux 基础IO(2)磁盘文件,linux
硬链接的本质是在指定目录下插入新的文件和和inode的映射关系,同时让inode的引用计数(硬链接数)++
Linux 基础IO(2)磁盘文件,linux
我们不能为目录建立硬链接,除非操作系统自己建立
Linux 基础IO(2)磁盘文件,linux
一个目录下有多少个子目录:硬连接数 - 2

4.动静态库

在Linux下,静态库的后缀是 .a,动态库的后缀是 .so
在Window下,静态库的后缀是 .lib,动态库的后缀是 .dll
libc.so库名去掉前缀lib,去掉后缀.a/.so就是库的名字

1.静态库

生成静态库
生成.o文件:Linux 基础IO(2)磁盘文件,linux
打包生成静态库:Linux 基础IO(2)磁盘文件,linux
ar:打包 -r:replace -c:create
使用静态库:Linux 基础IO(2)磁盘文件,linux
gcc 选项: -l:指定库名 -L:指定库路径 -I:指定头文件路径
静态库编译生成成功,运行时就不需要了
Linux 基础IO(2)磁盘文件,linux

库搜索路径:
-L指定目录下
系统指定目录下/usr/lib

2.动态库

生成.o文件:Linux 基础IO(2)磁盘文件,linux
gcc 选项: -fPIC:生成与位置无关码
打包生成动态库:Linux 基础IO(2)磁盘文件,linux
使用动态库:
Linux 基础IO(2)磁盘文件,linux
运行:Linux 基础IO(2)磁盘文件,linux
运行时报错:无法找到动态库,所以动态库在编译时需要给gcc/g++搜索路径,同时运行时需要给OS搜索路径
解决方法:

  1. 拷贝.so到系统共享库路径下
    Linux 基础IO(2)磁盘文件,linux
  2. 更改LD_LIBRARY_PATH环境变量
    将不在系统默认库搜索路径下的库的路径,添加到LD_LIBRARY_PATH
    缺点:bash重启之后需重新配置
    Linux 基础IO(2)磁盘文件,linux
  3. 在系统库的默认搜索路径下添加软链接
    Linux 基础IO(2)磁盘文件,linux
    Linux 基础IO(2)磁盘文件,linux
  4. 系统配置文件/etc/ld.so.conf.d/
    Linux 基础IO(2)磁盘文件,linux
    ldconfig:让配置文件生效

静态库:程序在编译链接时把库的代码复制到可执行文件中,程序运行时不再需要静态库
动态库:程序在运行时动态链接动态库的代码,多个库共享使用库的代码文章来源地址https://www.toymoban.com/news/detail-861398.html

  1. 同时提供静态库和动态库,gcc默认使用动态库
  2. 同时提供静态库和动态库,要静态链接,必须使用-static选项
  3. 只提供静态库,可执行程序只能对该库进行静态链接,但程序不一定是静态的,可能会动态链接其他库
  4. 只提供动态库,要静态链接,会发生链接报错

到了这里,关于Linux 基础IO(2)磁盘文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【Linux】基础IO----系统文件IO & 文件描述符fd & 重定向

    【Linux】基础IO----系统文件IO & 文件描述符fd & 重定向

    作者:დ旧言~ 座右铭:松树千年终是朽,槿花一日自为荣。 目标:了解在Linux下的系统文件IO,知道什么是文件描述符,什么是重定向 毒鸡汤:白日莫闲过,青春不再来。 专栏选自:Linux初阶 望小伙伴们点赞👍收藏✨加关注哟💕💕 最早我们在C语言中学习关于如何用代码

    2024年04月14日
    浏览(9)
  • 【Linux】基础IO——系统文件IO&&fd&&重定向

    【Linux】基础IO——系统文件IO&&fd&&重定向

    大家好我是沐曦希💕 空文件,也要在磁盘占据空间,因为文件也有属性,属性也属于数据,需要空间进行存储。所以 文件包括内容和属性 所以 对文件操作就是对内容或者对属性进行操作,或者对内容和属性进行操作。 文件具有唯一性,所以在 标定一个文件时候,必须使用

    2024年02月02日
    浏览(9)
  • 【Linux】基础 IO(文件描述符)-- 详解

    【Linux】基础 IO(文件描述符)-- 详解

    1、 文件的宏观理解 文件在哪呢? 从广义上理解,键盘、显示器、网卡、声卡、显卡、磁盘等几乎所有的外设都可以称之为文件,因为 “Linux 下,一切皆文件”。 从狭义上的理解, 文件在 磁盘(硬件) 上放着 ,只有操作系统才能真正的去访问磁盘。磁盘是一种永久存储介

    2024年03月24日
    浏览(9)
  • Linux基础IO【文件理解与操作】

    Linux基础IO【文件理解与操作】

    ✨个人主页: Yohifo 🎉所属专栏: Linux学习之旅 🎊每篇一句: 图片来源 🎃操作环境: CentOS 7.6 阿里云远程服务器 Great minds discuss ideas. Average minds discuss events. Small minds discuss people. 大智论道,中智论事,小智论人。 文件操作是 基础IO 学习的第一步,我们在 C语言 进阶中,就

    2024年02月02日
    浏览(14)
  • Linux(基础IO、文件权限、Makefile)

    Linux(基础IO、文件权限、Makefile)

    目录 1、man 手册 1.1 汉化 1.2 具体使用 2、文件权限 2.1 权限理解 2.2 文件详细信息查询 2.3 权限更改 3、常用函数接口 3.1 open 3.2 read 3.3 write 3.4 close 3.5 函数使用示例 4、make与Makefile 4.1 make 与 Makefile区别 4.2 Makefile的编写 5、vim简单操作 安装中文包 使用三种方式查询open接口的详

    2024年02月11日
    浏览(24)
  • Linux之基础IO文件系统讲解

    Linux之基础IO文件系统讲解

    在C语言中,读文件和写文件是常见的操作,用于从磁盘读取数据到内存或将数据从内存写入磁盘文件中。这些操作需要使用标准库中的文件I/O函数。下面我将详细解释如何在C语言中进行读文件和写文件操作,并举例说明。 在C语言中,读取文件的过程涉及以下步骤: 打开文

    2024年02月11日
    浏览(8)
  • 【linux深入剖析】深入理解基础外设--磁盘以及理解文件系统

    【linux深入剖析】深入理解基础外设--磁盘以及理解文件系统

    🍁你好,我是 RO-BERRY 📗 致力于C、C++、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 我们所有的文件都是与进程相关的文件–进程打开的文件 系统中是不是所有的文件都被打开了呢?如果没

    2024年04月11日
    浏览(16)
  • 【Linux】基础IO(一) :文件描述符,文件流指针,重定向

    【Linux】基础IO(一) :文件描述符,文件流指针,重定向

    🍎 作者: 阿润菜菜 📖 专栏: Linux系统编程 是不是只有C/C++有文件操作呢?python、java、go等文件接口操作的方法是不太一样的,那如何理解这种现象?有没有统一的视角去看待所有的语言文件操作呢?—我们今天从系统视角去理解 ---- 实际都是通过系统调用来访问 文件=内

    2024年01月18日
    浏览(13)
  • <Linux> 基础IO(文件操作、文件描述符fd、重定向)

    <Linux> 基础IO(文件操作、文件描述符fd、重定向)

    1、空文件也要在磁盘占用 我们创建的文件,虽然里面并没有存放数据,但是文件属性也是数据,即便你创建一个空文件,也要占据磁盘空间 2、文件 = 文件内容 + 文件属性 文件内容就是真正写入的内容,文件属性就是文件名、文件大小、文件的权限、拥有者所属组…… 3、文

    2024年02月03日
    浏览(27)
  • 【Linux】基础IO——文件系统|软硬链接|动静态库

    【Linux】基础IO——文件系统|软硬链接|动静态库

    基于上篇博客所写到的文件各种操作都是基于被打开文件所进行操作的,那么如果一个文件没有被打开它存在哪里呢?这个答案毫无疑问肯定是存在于磁盘上的。那么,对于一个没有打开的文件(也就是磁盘文件)我们应该如何理解呢? 这里我们所要讲的磁盘是机械硬盘、即

    2024年02月04日
    浏览(11)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包