2018-2019-1 20165330 《信息安全系统设计基础》第六周学习总结

学习目标

  • 了解系统调用及错误处理方法
  • 理解IO处理及文件系统
  • 掌握Unix/Linux系统级I/O:open close read write seek stat
  • 掌握I/O重定向的方法

学习内容

Linux I/O
  1. Linux I/O:将设备优雅地映射为文件的方式,允许Linux内核引出一个简单、低级的应用接口
  2. 输入输出执行方式:
    • 打开文件
      • 描述符:内核打开文件时返回的一个小的非负整数
    • 每个进程开始均有三个打开的文件
      • 标准输入(描述符为0)
      • 标准输出(描述符为1)
      • 标准错误(描述符为2)
    • 改变当前的文件位置
    • 读写文件
    • 关闭文件
  3. 文件
    • 类型:普通文件、目录、套接字

      • 目录层次:image
    • 打开和关闭文件

      • 调用open函数打开一个已存在的文件或创建一个新文件
       int open(char *filename,int flags,mode_t mode);
      
      • flags参数指明打开文件方式:
        • O_RDONLY:只读
        • O_WRONLY:只写
        • O_RDWR:可读可写
      • flags参数提供额外提示:
        • O_CREAT:文件不存在,创建一个截断(空)文件
        • O_TRUNC:文件已存在就截断它
        • O_APPEND:在每次写操作前,设置文件位置到文件的结尾处
      • 关闭文件:
        int close(fd);
      
    • 读和写文件

      • 调用readwrite函数执行输入输出
       size_t read(int fd,void *buf,size_t n);
       ssize_t write(int fd,void *buf,size_t n);
      
RIO包
  1. 无缓冲的输入输出函数
     #include "csapp.h"
     ssize_t rio_readn(int fd,void *usrbuf,size_t n);
     ssize_t rio_writen(int fd,void *usrbuf,size_t n);
    
  2. 带缓冲的输入函数
     #include "csapp.h"
     void rio_readinitb(rio_t *rp,int fd);
     ssize_t rio_readlineb(rio_t *rp,void *usrbuf,size_t maxlen);
     ssize_t rio_readnb(rio_t *rp,void *usrbuf,size_t n);
    
  3. 读取文件元数据
  • 调用statfstat函数检索文件的信息(元数据)
     #include <unistd.h>
     #include <sys/stat.h>
     int stat(const char *filename,struct stat *buf);
     int fstat(int fd,struct stat *buf);
    
  1. 读取目录内容
  • 返回目录流的指针
     #include <dirent.h>
     #include <sys/stat.h>
     DIR *opendir(const char *name);
    
  • 返回流dirp中下一目录项的指针
     #include <dirent.h>
     struct dirent *readdir(DIR *dirp);
    
  • 关闭流并释放所有资源
     #include <dirent.h>
     int closedir(DIR *dirp);
    
I/O重定向
  1. Linux shell提供了I/O重定向操作符,允许用户将磁盘文件和标准输入输出联系起来

  2. 重定向到磁盘文件foo.txtlinux> ls > foo.txt

  3. I/O重定向使用dup2函数工作

    #include <unistd.h>
    int dup2(int oldfd,int newfd);
    

image

两个重要命令
  1. man -k key1 | grep key2| grep 2:根据关键字检索系统调用
    • Linux系统提供了相对比较丰富的帮助手册(man),man是manual的缩写,在日常linux系统管理中经常用到
    • 在Ubuntu下可通过man deluser查看相关帮助文档
    • man -k:根据关键字搜索联机帮助,是一种模糊搜索
    • man -f:关键字精确搜索,与-k不同,它只搜索与关键字完全匹配的帮助页
    • man -a:搜索并打开所有man中同名帮助
    • man -aw:显示所有手册文件的路径
  2. grep -nr XXX /usr/include:查找宏定义,类型定义
    • grep -nr:这条语句可以用来查找关键字,全文搜索,并且可以直接查找文件内的内容
    • 查找宏 STDOUTFILENO 的值:grep -nr STDOUTFILENO /usr/include
    • 查找当前目录下.cmain函数在那个文件中:grep main .c
    • grep [options]:过滤/搜索特定字符
    • [options]主要参数:
      • -a:不要忽略二进制的数据
      • -A<显示列数>:除了显示符合范本样式的那一列之外,并显示该列之后的内容
      • -b:在显示符合范本样式的那一列之前,标示出该列第一个字符的位编号
      • -B<显示列数>:除了显示符合范本样式的那一列之外,并显示该列之前的内容
      • -c:计算符合范本样式的列数。
      • -V:显示版本信息
      • -q:不显示任何信息

ch06课下测试错题总结

  • 有关磁盘操作,说法正确的是()

A .
对磁盘扇区的访问时间包括三个部分中,传送时间最小。

B .
磁盘以字节为单位读写数据

C .
磁盘以扇区为单位读写数据

D .
读写头总处于同一柱面

正确答案:A C D 书P409

  • 有关RAM的说法,正确的是()

A .
SRAM和DRAM掉电后均无法保存里面的内容。

B .
DRAM将一个bit存在一个双稳态的存储单元中

C .
一般来说,SRAM比DRAM快

D .
SRAM常用来作高速缓存

E .
DRAM将每一个bit存储为对一个电容充电

F .
SRAM需要不断刷新

G .
DRAM被组织为二维数组而不是线性数组

正确答案: A C D E G 书P400

posted @ 2018-11-04 00:31  20165330张羽昕  阅读(116)  评论(0编辑  收藏  举报