一、文件的操作

思维导图

注意:

  • 所有下面这些的【文件操作】都是用到【系统调用】
    • 那么第一章学过,【系统调用】一定会导致CPU【变态(用户态—>内核态)】
    • 而【文件在内存】=【资源可用】
    • 【文件不在内存】=【资源暂时不可用】
      • 【进程】会由【运行态——>阻塞态(也可叫睡眠等待态)】

1、创建文件:creat系统调用

做2件事:

  • 1、在【外存磁盘】找到该类型文件【所需空间】
  • 2、在创建文件的那层目录的【目录文件】里添加【目录项】
    • ​​​​​​​目录项记录了【文件名】、【该文件在外存存放的信息】​​​​​​​

2、删除文件:delete系统调用

做3件事:

  • 1、根据该文件,到外存【找到此文件所在的目录文件】以及【目录文件里该文件所在的目录项】
  • 2、根据目录项信息,去【外存释放该文件占用的磁盘块】
  • 3、最后回到目录文件【删除目录项】

3、打开文件:open系统调用

  • (文件已经被创建在磁盘,进程【读】/【写】前,要先打开它)

    • 1、根据该文件到外存找到其目录文件,再找到【该文件在目录文件所在的目录项】
    • 2、将【该文件的目录项】复制到【内存里的 “文件打开表” 】(注意是目录项,也就是“它在哪”;而是文件本身)
      • 并将【该目录项在 “文件打开表” 里的编号】发给进程(该“编号”也叫“索引号”、“文件描述符”
      • 之后每次查找该文件都可直接去【打开文件表】找到它的信息,再去外存取文件

  • 【文件打开表】

    • 【系统文件打开表】
      • 整个系统只有1个【系统打开文件表】:供所有进程查找文件位置信息
      • 里面有一个【打开计数器】:记录有几个进程打开了该文件
    • ​​​​​​​【用户文件打开表】
      • 各个进程有自己的【用户打开文件表】
        • 进程在打开一次该文件后,可以复制【系统打开文件表里的 该表项】存到【自己的用户打开文件表】,后续【方便自己读文件
        • 注意
          • 不同进程的【用户文件打开表】中,对同一文件的表项,内容并不一样!!!
          • 而且不止是【read读操作】会打开文件,【write写操作】也会!!
  • 注意

4、关闭文件:close系统调用

​​​​​​​做两件事:

  • ​​​​​​​1、把【进程的 打开文件表】里【该文件的表项】删除
  • 2、在【系统的 打开文件表】里把【该文件的打开计数器值-1】
  •  注意:【参数不需要:文件名】!!!!

【超级超级大重点,真题超级大误区!!】

  • 1、这里不管是【用户打开表】、【系统打开表】,都在【内存】!!!!!!!!!
    • 当进程【close关闭】一个文件时,只是对【内存里的这些表】里面【计数器的count-1】
  • 2、下面要学的【文件共享——硬链接】
    • 这个【链接计数器count】才是在该文件的【索引节点】里的,而索引节点在【外存磁盘】!!!
    • 【close】关闭文件跟它无关!!!!

5、读文件:read系统调用

就1件事:

  • 去【进程的 打开文件表】找到该文件表项,传入相应参数到read()系统调用来读入数据、并展示在显示屏
    • 注意:【参数不需要:文件名】!!!!!
    •  而且不止是【read读操作】会打开文件,【write写操作】也会!!

6、写文件:write系统调用

就1件事:

  • 去【进程的 打开文件表】找到该文件表项,传入相应参数到write()系统调用来写入数据,write()系统调用把新数据写回到外存里,使该文件在内存、外存保持内容一致
  • 注意:【参数不需要:文件名】!!!!
  •  而且不止是【read读操作】会打开文件,【write写操作】也会!!

【总结】

【例题】

二、文件共享

  • 区分概念:
    • 共享:
    • 复制:

1、【硬链接】:基于索引节点的共享方式

  • 注意:【删除文件】一定要有前提条件:
    • 【count=0】才可以!!否则先删除文件,count还不为0就表示还有指针指向空节点

  • 【超级超级大重点,真题超级大误区!!】

    • 1、这里不管是【用户打开表】、【系统打开表】,都在【内存】!!!!!!!!!
      • 当进程【close关闭】一个文件时,只是对【内存里的这些表】里面【计数器的count-1】
    • 2、下面要学的【文件共享——硬链接】
      • 这个【链接计数器count】才是在该文件的【索引节点】里的,而索引节点在【外存磁盘】!!!
      • 【close】关闭文件跟它无关!!!!

2、【软连接】:利用符号链接实现共享

  • 重点:软连接是要共享的进程自己创建【独立的链接文件】指向该共享文件
    • 【独立的链接文件】它不是真的指针、他只是一个记录了【共享文件路径】的特殊文件
      • 他就是共享文件的 “快捷方式”
      • 因此【删除link文件】、【增加link文件】和原共享文件的索引节点的count值一丁点关系没有
    • 【软链接count值】:而【link文件】本身也属于文件,那么肯定一个进程的link文件肯定也会对应一个索引节点,索引节点里会有这个link文件的count值,但是他永远只会是1,因为不会有别的进程硬链接到这个link文件上
      • ​​​​​​​删除【共享文件的 硬链接】,不影响【软连接】
      • 删除、增加【共享文件的 软连接】,不影响【共享文件】
      • 删除【共享文件】,影响【软链接】

三、文件保护

1、口令保护

2、加密保护

3、访问权限控制

【例题】

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐