信息安全系统设计与实现 学习笔记4

发布时间 2023-09-28 22:13:58作者: 20211412赖加奕

文件操作

文件操作级别

  1. 硬件级别:
    fdisk将硬盘、U盘或SDC盘分区。
    mkfs:格式化磁盘分区,为系统做好准备。
    fsck:检查和维修系统。
    碎片整理:压缩文件系统中的文件。
  2. 操作系统内核中的文件系统函数
    kmount(),kumount()
    kmkdir(),krmdir()
  3. 系统调用 用户模式使用系统调用来访问内核函数
  4. I/O库函数

除了读/写内存位置的sscanf()/sprintf()函数之外,所有其他I/O库函数都建立在系统调用之上,也就是说,它们最终会通过系统内核发出实际数据传输的系统调用

  1. 用户命令
    用户可以使用Unix/Linux命令来执行文件操作,而不是编写程序。
  2. sh脚本

文件I/O操作(gpt提问)

控制流
(1)用户模式下的程序执行操作
FILE *fp = fopen("file","r");or FILE *fp = fopen("file","w");
(2)fopen在用户(heap)空间中创建一个FILE结构体,向内核中的kopen()发出一个fd = open("file",flags = READ or WRITE)系统调用,构建一个Opentable表示打开文件实例。成功后,fp会指向FILE结构体
(3)fread(ubuf,size,nitem,fp)`:将nitem个size字节读取到ubuf上

  • 若数据足够,则返回
  • 如果fbuf没有更多数据,则执行(4a)
    (4a)发出read(fd,fbuf,BLKSIZE)系统调用,将文件从内核读取到fbuf,然后将数据复制到ubuf上,直到数据足够或者文件无更多数据可复制
    (4b)fwrite(ubuf,size,nitem,fp):将数据从ubuf复制到fbuf
  • 若(fbuf有空间):将数据复制到fbuf上,并返回
  • 若(fbuf已满):发出write(fd,fbuf,BLKSIZE)系统调用,将数据块写入内核,然后再次写入fbuf
    (5)内核中的文件系统函数:假设非特殊文件的read(fd,fbuf[],BLKSIZE)系统调用
    (6)read()系统调用中,fd是一个打开的文件描述符,指向一个表示打开文件的OpenTable
    (7)OpenTable包含文件的打开模式、一个指向内存中文件INODE的指针和读/写文件当前字节偏移量
    (8)Minode包含文件的内存INODE
    (9)操作内核通常会使用一组I/O缓冲区作为高速缓存
    (10)设备I/O