zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    C# 比较多个数组(lambda,匿名比较器)
    JPA javax.persistence.TransactionRequiredException
    JPA:identifier of an instance of was altered from
    JPA 连表查询
    java json转换(二)
    java querydsl使用
    SpringCloud 过滤器
    Android : Resource is not a Drawable (color or path)
    springcloud 新增微服务
    序列化二叉树
  • 原文地址:https://www.cnblogs.com/besty-zyx/p/9902817.html
Copyright © 2011-2022 走看看