首页 > 其他分享 >20211314王艺达学习笔记4

20211314王艺达学习笔记4

时间:2023-09-29 17:46:38浏览次数:31  
标签:文件 调用 系统 王艺达 文件系统 笔记 内核 20211314 Linux

学习总结

第七章 文件操作

文件操作级别

(1)硬件级别

fdisk:将硬盘、U盘或SDC盘分区
mkfs:格式化磁盘分区,为系统做好准备
fsck:检 查和维修系统
碎片整理:压缩文件系统中的文件

(2)操作系统内核中的文件系统函数

前缀为k表示内核函数

(3)系统调用

open()、read()、lseek()、close()
open()、read()、lseek()和 close()函数都是C语言库函数。每个库函数都会发出一个系统调用,使进程进入内核模式来执行相应的内核函数,例如open可进入kopen(),read可进入kread()函数,等等。当进程结束执行内核函数时,会返回到用户模式,并得到所需的结果。在用户模式和内核模式之间切换需要大量的操作(和时间)。因此,内核和用户空间之间的数据传输成本昂贵。对于读/写文件,最好的方法是匹配内核的功能。内核会按数据块大小(从1KB到8KB)来读取/写入文件。(在Linux 中,硬盘的默认数据块大小是4KB,软盘的是1KB)

(4)I/O库函数

用户通常需要读/写单独的字符、行或数据结构记录等。如果只有系统调用,用户模式程序则必须自己从缓冲区执行这些操作。C语言库提供了一系列标准的I/O函数,同时也提高了运行效率。I/O库函数包括:
FILE:fopen()、fread();fwrite()、fseek()、fclose()、fflush()
char:getc()、getchar()、ugetc()、putc()、putchar()
line:gets()、fgets()、puts()、fputs()
formatted:scanf()、fscanf()、sscanf()、printf()、fprintf()、sprintf()

(5)用户命令

用户可以使用Unix/Linux命令来执行文件操作,而不是编写程序。
mkdir,rmdir,cd,pwd,ls,link,unlink,rm,cat,cp,mv,chmod,etc.

(6)sh脚本

sh语言包含所有的有效Unix/Linux命令,它还支持变量和控制语句,如if、do、for、while、case等。除此之外,Perl和Tcl等其他许多脚本语言也使用广泛。在面对复杂的GUI操作时可以采用sh脚本来帮助解决这个问题。

文件I/0操作

低级别文件操作

分区:

一个块存储设备,如硬盘、U盘、SD卡等,可以分为几个逻辑单元,成为分区。
分区表唯一第一个扇区的字节偏移446(0x1BE)处,成为设备的主引导记录(MBR)

格式化分区:

fdisk只是将一个存储设备划分为多个分区。每个分区都有特定的文件系统类型,但是分区还不能使用。为了存储文件,必须先为特定的文件系统准备好分区。该操作习惯上称为格式化磁盘或磁盘分区。在Linux中,它被称为mkfs,表示Make文件系统。Linux支持多种不同类型的文件系统。下面使用1440个块把vdisk格式化为ext2文件系统:

格式化后的磁盘应是只包含根目录的空文件系统。但是,Linux的mkfs始终会在根目录下创建一个默认的lost+found目录。完成mkfs之后,设备就可以使用了。在Linux中,还不能访问新的文件系统。它必须挂载到根文件系统中的现有目录中。/mnt目录通常用于挂载其他文件系统。由于虚拟文件系统不是真正的设备,它们必须作为循环设备挂载。下面把vdisk挂载到/mnt目录里边。

挂载分区

EXT2文件系统

Linux一直使用EXT2作为默认文件系统,EXT3是EXT2的扩展,增加的主要是一个日志文件,EXT4是EXT3的扩展,增加了磁盘块的分配(连续的)。

Block#0:引导块,文件系统不使用它,用于容纳从磁盘引导操作系统的引导程序。
Block#1:超级块,用于容纳关于整个文件系统的信息。
Block#2:块组描述符块,EXT2将磁盘分成几个组(每组8192块),每组用一个块组描述符结构体描述。
Block#8:块位图,用来表示某种项的位序列。
Block#9:索引节点位图,用来代表一个文件的数据结构。
Block#10:索引节点,每个文件都用一个128字节(EXT4的是256字节)的独特索引节点结构体表示。
直接块:指向直接磁盘块;
间接块:每个块编号指向一个磁盘块;
双重间接块:每个块指向256个磁盘块;
三重间接块:对于小型的“EXT2”文件系统,可以忽略这个块。
数据块:紧跟在索引节点块后面的是文件存储块。

第八章 使用系统调用进行文件操作

1.系统调用

简称syscall,是一种允许进程进入Kmode以执行Umode不允许操作的机制。

2.系统调用手册页

在Ubuntu Linux中,手册页保存在/usr/share/man目录中,man2子目录中列出了所有的系统调用手册页。

man 2 NAME :显示系统调用名称的手册页

3.使用系统调用进行文件操作

系统调用必须由程序发出,用法就像函数调用。每个系统调用都是一个库函数,它汇集系统调用参数,并最终向操作系统内核发出一个系统调用。

4.常用的系统调用

stat:获取文件状态信息
open:打开一个文件进行读、写、追加
close:关闭打开的文件描述符
read:读取打开的文件描述符
write:写入打开的文件描述符
lseek:重新定位文件描述符的读/写偏移量
dup:将文件描述符复制到可用的最小描述符编号中
dup2:将oldfd复制到newfd中,如果newfd已打开,先将其关闭
link:将新文件硬链接到旧文件
unlink:取消某个文件的链接,如果文件链接数为0,则删除文件
symlink:创建一个符号链接
readlink:读取符号链接文件内容
umask:设置文件创建掩码,文件权限为(mask&~umask)

5.链接文件

6.stat系统调用

stat文件状态
stat按文件名统计指向文件,并在缓冲区中填写stat信息
stat结构体
stat与文件索引节点
每个索引节点在存储设备上都有唯一的索引节点编号(ino)
文件类型和权限
st_mode是16位,前4位是文件类型,接下来的3位表示文件的特殊用法,其余9位是文件保护权限位。
opendir-readdir函数
readlink函数
ls程序

标签:文件,调用,系统,王艺达,文件系统,笔记,内核,20211314,Linux
From: https://www.cnblogs.com/bestiwyd/p/17737118.html

相关文章

  • 从小工到专家阅读笔记(一)
    第一篇:1.我的源码让猫给吃了 出现了未曾想的问题,要设法尽可能地处理它们,可以为自己的能力自豪,但对于错误必须真诚面对。对于不可能做到的事情,有权不为之负责,如果答应别人的项目必须切实负则。不要为出错的情况找借口,对老板说"我的源码让猫给吃了”这种言语,对解决问题没有任何......
  • 数位dp学习笔记
    数位dp学习笔记目录数位dp学习笔记数位dp定义:题型特征:dp设计:dp转移例题:BZOJ3679数位dp定义:...好像就是对数位进行dp,统计方案数。题型特征:通常会有10组左右的询问,每一次询问你较大(1e18左右)的区间内满足某个条件的数的数量。dp设计:dp一般会有2到4维。通常情况下,第一维i表......
  • 《程序员修炼之道:从小工到专家》第一第二章读书笔记
    第一章:追求实效的哲学第一节:我的源码被猫吃了在开发过程中,我们经常会遇到一些意想不到的技术问题,导致交付延迟等情况。然而,作为程序员,我们需要诚实和坦率地面对这些问题,并勇于承认自己的错误。我们应该以专业的态度处理这些问题,而不是找借口。此外,我们要对自己承担的责任负责。......
  • 国庆NOIP储备营讲课笔记
    Day1(基础算法)讲师:余快枚举法例题1给定一个数\(x\),判断\(x\)是不是质数。朴素算法:枚举\([2,x−1]\)之间所有的整数\(i\),逐个判断\(x\)是否被\(i\)整除,若都不能整除则\(x\)是质数,时间复杂度\(O(x)\),搞个\(10^9\)直接卡过。该怎么优化呢?优化枚举范围:只需枚举到......
  • 学习笔记
    周屹梁的学习笔记个人各平台地址博客地址:https://www.cnblogs.com/zylyehuo/gitee地址:https://gitee.com/zylyehuogithub地址:https://github.com/zylyehuo夯实基础四元数法|代价地图组成(多层叠加)|通过openpyxl操作excel表格|Ubuntu下查看ip|Windows终......
  • [笔记]操作系统_2024年考纲
    一、操作系统基础(一)操作系统的基本概念(二)操作系统发展历程(三)程序运行环境1.CPU运行模式内核模式,用户模式。2.中断和异常的处理3.系统调用4.程序的链接与装入5.程序运行时的内存映像与地址空间(四)操作系统结构分层,模块化,宏内核,微内核,外核。(五)操作系统引导(六)虚拟......
  • 9.29 《代码大全2》阅读笔记
    《代码大全2》是一本非常经典的软件开发书籍。在书中,强调了比较优秀的代码结构和命名规范的重要性。书中注释的部分帮助我理解怎么去编写有意义的注释,合适的注释可以提供代码理解上的便利,但是过多或者无关的注释会干扰代码的可读性。还有书中关于代码复用和模块化的内容帮助学习......
  • 初中生都能看懂的 LCT 学习笔记
    初中生都能看懂的LCT学习笔记这篇文章偏向入门,旨在尽可能解决一类问题——动态树,主要讲述并且整理LCT算法及其一些变式。目前其变式例题作者还在整理之中,编者保证会把变式例题持续更新。0.前置知识splay。我可以猜测一下,你们可能看到splay,然后就可能去学了splay树,然......
  • Python笔记:基本数据结构(容器)的优化
    列表的性能问题队列的弹出问题利用Python的原生语法很难写出一个真正完全能达到\(O(1)\)的队列,究其原因是由于insert方法的时间复杂度问题:classqueue: def__init__(self,q): self.q=[] defpopright(self): self.q.pop() defappendleft(self,elem): self.q.ins......
  • 信息安全系统设计与实现学习笔记4
    学习笔记4-总结知识点总结1.文件操作级别硬件级别:mkfs:格式化磁盘分区,为系统做好准备。fsck:检查和维修系统。碎片整理:压缩文件系统中的文件。操作系统内核中的文件系统函数:提供基本文件操作支持,例如:kmkdir(),krmdir()kchair(),kgetCwd()klink(),kunlink(......