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

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

教材学习内容总结

第十章 系统级I/O

  • 输入/输出是在主存和外部设备之间复制数据的过程。输入操作是从I/O设备复制数据到主存,输出操作是从主存复制数据到I/O设备。
Unix I/O
  • 一个Linux文件就是一个m字节的序列,所有的I/O设备都被模型化为文件,而所有的输入和输出都被当做对相应文件的读和写来执行。这种将设备优雅地映射为文件的方式,允许Linux文件内核引出一个简单、低级的应用接口,称为Unix I/O。
文件
  • 普通文件:包含任意数据,应用程序通常区分文本文件和二进制文件,对内核而言,文本文件和二进制文件无区别。
  • 目录:包含一组链接的文件,每个链接都将一个文件名映射到一个文件,这个文件可能是另一个目录。
  • 套接字:用来与另一个进程进行跨网络通信的文件
    Linux内核将所有文件都组织成一个目录层次结构,由名为/的根目录确定。
打开和关闭文件
  • 进程是通过调用open函数来打开一个已存在的文件或者创建一个新文件。
  • open函数将filename转换成一个文件描述符,并且返回描述符数字,返回的描述符总是在进程中当前没有打开的最小描述符。flags参数指明了进程打算如何访问这个文件:
    O_RDONLY:只读
    O_WRONLY:只写
    O_RDWR:可读可写
  • flags参数也可以是一个或者更多位掩码的或,为写提供一些额外提示。
    O_CREAT:不存在则创建它的一个截断的空文件
    O_TRUNC:如果存在,则截断
    O_APPEND:每次从文件末尾处进行写操作
读/写文件
  • 读/写操作分别是调用read/write函数实现的
  • read:从描述符为fd的当前文件位置复制最多n个字节到内存位置buf,返回-1表示一个错误,返回0表示EOF,否则表示实际传送的字节数。
  • write:从内存为止buf复制最多n个字节到描述符fd的当前位置
RIO包健壮读写
  • 自动处理read和write的不足值
  • RIO提供两类不同的函数:
    无缓冲的输入输出函数:调用rio_readn和rio_writen,应用程序可以在内存和文件之间直接传送数据。
    带缓冲的输入函数:调用一个包装函数(rio_readlineb)从一个内部读缓冲区复制一个文本行,当缓冲区变空时,会自动调用read重新填满缓冲区。
读取文件元数据
  • 应用程序能够通过调用stat和fstat函数,检索到关于文件的信息,有时也称为文件的元数据。

教材学习中的问题和解决过程

  • 问题1:C的标准I/O库与Linux I/O有什么关系
  • 解决方法:I/O分类:有两种I/O,一是文件I/O,而c语言的封装叫标准I/O。标准I/O是基于文件I/O的,标准IO调用了文件IO,也优化了文件IO,例如引入缓存机制。所以C标准I/O库函数在头文件stdio.h中声明,而read、 write等函数(文件I/O)在头文件unistd.h中声明 。linux中的C语言头文件存放在/usr/include下,可以打开查看具体定义。

posted on 2018-11-04 22:40  月半月半白勺  阅读(85)  评论(0编辑  收藏  举报

导航