zoukankan      html  css  js  c++  java
  • 20145324 《信息安全系统设计基础》第九周学习总结

    20145324 《信息安全系统设计基础》第九周学习总结

    教材学习内容总结

    输入/输出是在主存和外部设备之间拷贝数据的过程

    输入操作是从I/O设备拷贝数据到主存,输出操作是从主存拷贝数据到I/O设备

    Unix I/O:

    将设备映射为文件的方式,允许Unix内核引出一个简单、低级的应用接口
    ①打开文件:一个应用程序通过要求内核打开相应的文件,以此宣告要访问一个I/O设备

    描述符:打开文件时,内核返回一个小的非负整数

    Unix外壳创建的每个进程开始时都有三个打开的文件:

    标准输入(描述符为0)、标准输出(描述符为1)、标准错误(描述符为2)
    ②改变当前的文件位置:对于每个打开的文件,内核保持着一个文件位置k,初始为0,seek操作:显式地设置文件的当前位置为k
    ③读写文件:EOF条件
    ④关闭文件:内核释放文件打开时创建的数据结构,并将这个描述符恢复到可用的描述符池中

    无论一个进程因为何种原因终止时,内核都会关闭所有打开的文件并释放它们的存储器资源

    1.open函数:调用此函数打开一个已存在的文件或者创建一个新文件

    open函数将filename转换为一个文件描述符,并且返回描述符数字。
    返回的描述符总是在进程中当前没有打开的最小描述符。

    flag参数指明进程如何访问文件:
    O_ RDONLY :只读
    O_ WRONLY :只写
    O_ RDWR :可读可写

    flag参数可以是一个或多个更多位掩码的或:
    O_ CREAT:如果文件不存在,就创建它的一个截断的空文件
    O_ TRUNC:如果文件已经存在,就截断它
    O_ APPEND:在每次写操作前,设置文件位置到文件的结尾处

    mode参数指定了新文件的访问权限位

    2.close函数:进程调用该函数关闭一个已经打开的文件

    关闭一个已关闭的描述符会出错

    3.read和write函数:应用程序是通过分别调用read和write函数来执行输入和输出的

    read函数:从描述符为fd的当前文件位置拷贝最多n个字节到存储器位置buf

    返回值:-1:一个错误;0:EOF;否则,返回值:实际传送的字节数量

    write函数:从存储器位置buf拷贝至多n个字节到描述符fd的当前文件位置

    一次一个字节地从标准输入拷贝到标准输出

    read和write传送的字节比应用程序要求的少会出现不足值
    产生不足值的原因:
    •读时遇到EOF
    •从终端读文本行
    •读和写网络套接字

    RIO

    健壮的I/O包,自动处理不足值
    提供两种函数:无缓冲的输入输出函数、带缓冲的输入函数
    应用程序通过调用rio_readn和rio_written函数可以在存储器和文件之间直接传送数据
    rio_readn函数在遇到EOF时,只能返回一个不足值
    rio_writen函数后局不会返回不足值

    RIO的带缓冲的输入函数

    一个文本行就是一个由换行符结尾的ASCII码字符序列。 在Unix系统中,换行符(‘ ’)与ASCII码换行符相同,数字值为0x0a

    4.rio_readn函数

    5.rio_writen函数

    应用程序能够通过调用stat和fstat函数检索文件信息(元数据)

    stat函数以一个文件名作为输入
    fstat函数以文件描述符而不是文件名作为输入

    st_ size成员包含了文件的字节数大小
    st_ mode成员则编码了文件访问许可位和文件类型
    文件类型包括:
    普通文件:某种类型的二进制或文本数据
    目录文件:关于其他文件的信息
    套接字:一种用来通过网络与其他进程通信的文件

    宏指令根据st_mode成员来确定文件的类型。

    S_ ISREG():这是一个普通文件吗?
    S_ ISDIR():这是一个目录文件吗?
    S_ ISSOCK():这是一个网络套接字吗?

    共享文件

    内核使用三个相关的数据结构来表示打开的文件:
    ①描述符表:每个进程都有它独立的描述符表,每个打开的描述符表项指向文件表中的一个表项
    ②文件表:所有进程共享这张表,每个文件表的表项组成包括有当前的文件位置、引用计数、以及一个指向v-node表中对应表项的指针,直到引用计数为0,内核才会删除该文件表表项。
    ③v-node表:所有进程共享这张v-node表,多个描述符可以通过不同的文件表表项来引用同一个文件

    关键思想是每个描述符都有它自己的文件位置,所以对不同描述符的读操作可以从文件的不同位置获取数据

    Unix外壳提供了I/O重定向操作符,允许用户将磁盘文件和标准输入输出联系起来

    标准I/O库将一个打开的文件模型化为一个流,一个流就是一个指向FILE类型的结构的指针
    每个ANSIC程序开始都有三个打开的流stdin、stdout和stderr,分别对应于标准输入、标准输出、标准错误

    类型为FILE的流是对文件描述符和流缓冲区的抽象
    流缓冲区的目的和RIO读缓冲区的一样,就是开销较高的Unix I/O系统调用的数量尽量能的小

    代码调试中的问题和解决过程

    找不到地方下载csapp.h csapp.c文件,教材上的代码无法编译

    关于grep -nr xxx /usr/include 命令的使用

    grep -nr 这条语句可以用来查找关键字,全文搜索,并且可以直接查找文件内的内容

    使用man -k sort | grep 3,可以更好的找到qsort

    本周代码托管截图

    学习进度条

    博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 30篇 400小时
    第零周 1/1 20/20
    第一周 1/2 20/40
    第二周 1/3 20/60
    第三周 1/4 20/80
    第四周 1/5 20/100
    第五周 1/6 20/120
    第六周 1/7 20/140
    第七周 1/8 20/160
    第八周 5/13 20/180
    第九周 1/14 20/200

    参考资料

  • 相关阅读:
    java_oop_方法2
    POJ 3276 Face The Right Way(反转)
    POJ 3276 Face The Right Way(反转)
    POJ 2566 Bound Found(尺取法,前缀和)
    POJ 2566 Bound Found(尺取法,前缀和)
    POJ 3320 Jessica's Reading Problem(尺取法)
    POJ 3320 Jessica's Reading Problem(尺取法)
    POJ 3061 Subsequence(尺取法)
    POJ 3061 Subsequence(尺取法)
    HDU 1222 Wolf and Rabbit(欧几里得)
  • 原文地址:https://www.cnblogs.com/SJZGM10/p/6048245.html
Copyright © 2011-2022 走看看