20145230《信息安全系统设计基础》第九周学习总结
20145230 《信息安全系统设计基础》第九周学习总结
教材学习内容总结
- 输入/输出是在主存和外部设备之间拷贝数据的过程,输入操作是从I/O设备拷贝数据到主存,输出操作是从主存拷贝数据到I/O设备。
Unix I/O
-
Unix文件:m个字节的序列
-
I/O设备:网络、磁盘和终端
-
Unix I/O :将设备映射为文件的方式,允许Unix内核引出一个简单、低级的应用接口。
-
描述符:打开文件时,内核返回一个小的非负整数。 Unix外壳创建的每个进程开始时都有三个打开的文件:标准输入(描述符为0)、标准输出(描述符为1)、标准错误(描述符为2)。 改变当前的文件位置:文件位置为k,初始为0。 seek操作:显式地设置文件的当前位置为k。
-
EOF:是一个条件,而不是一个符号。
-
关闭文件:内核释放文件打开时创建的数据结构,并将这个描述符恢复到可用的描述符池中。无论一个进程因为何种原因终止时,内核都会关闭所有打开的文件并释放它们的存储器资源。
-
open函数将filename转换成一个文件描述符,并且返回描述符数字。返回的描述符总是在进程中当前没有打开的最小描述符。
fd = Open("文件名",flag参数,mode参数) -
fd是返回的文件描述符(数字),总是返回在进程中当前没有打开的最小描述符。
-
flag参数:
表示访问方式额外提示
O_RDONLY:只读。
O_WRONLY:只写。
O_RDWR:可读可写。 -
一位或者多位掩码的或
O_CREAT,表示如果文件不存在,就创建它的一个截断的文件。
O_TRUNC:如果文件已经存在,就截断它。
O_APPEND:在每次写操作前,设置文件位置到文件的结尾处。
读取文件元数据
- 应用程序能够通过调用stat和fstat函数,检索到关于文件的信息(元数据)。
- st_size成员包含了文件的字节数大小
- st_mode成员编码了文件访问许可位和文件类型
- Unix提供的宏指令根据st_mode成员来确定文件的类型
共享文件
- 内核使用三个相关的数据结构来表示打开的文件: •描述符表:每个打开的描述符表项指向文件表中的一个表项
- 文件表:所有进程共享这张表,每个表项包括文件位置,引用计数,以及一个指向v-node表对应表项的指针
- v-node表:所有进程共享这张表,包含stat结构中的大多数信息
标准I/O和I/O函数
-
应用程序可以通过open、close、lseek、read、write和stat这样的函数来访问Unix I/O。
RIO函数:read和write的健壮的包装函数,自动处理不足值,为读文本行提供一种高效的带缓冲的方法。
标准I/O函数:提供了Unix I/O函数的一个更加完整的带缓冲的替代品,包括格式化的I/O例程。是磁盘和终端设备I/O之选。 -
套接字描述符:Unix对网络的抽象是一种称为套接字的文件类型,被称为套接字描述符。应用进程通过读写套接字描述符来与运行在其他计算机上的进程通信。
-
对流I/O限制是: 跟在输出函数之后的输入函数,必须在其中间插入fflush、fseek、fsetpos或者rewind函数,后三个函数使用Unix I/O中的lseek函数来重置当前的文件位置。
-
跟在输入函数之后的输出函数,必须在中间插入fseek、fsetpos或者rewind的调用,一个输出函数不能跟随在一个输入函数之后,除非该输入函数遇到了一个EOF。
-
解决对流I/O限制的方法是: 采用在每个输入操作前刷新缓存区这样的规则来满足。
代码托管截图
- 20145230/IS-design-20145230 - 码云 - 开源中国 http://git.oschina.net/20145230/IS-design-20145230
心得体会
通过对本章系统级I/O的学习,我了解到Unix内核引出的应用接口I/O的基本功能和使用方法,它允许应用程序打开、关闭、读和写文件、提取文件的元数据,以及执行I/O重定向。反正,坚持脚踏实地地完成好每周的任务使我们需要做到的,学好一门课程及语言的捷径就是不断实践、练习!
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 2000行 | 20篇 | 400小时 | |
第一周 | 2/2 | 20/20 | 初步了解Linux的一些基本命令 | |
第二周 | 1/3 | 15/35 | 了解vim编辑器 | |
第三周 | 86/86 | 1/4 | 25/60 | 了解了信息的表示和处理 |
第五周 | 79/79 | 1/5 | 30/90 | 了解了程序的机器级表示 |
第七周 | 84/305 | 1/7 | 20/140 | 了解存储器的层次结构 |
第八周 | 0/305 | 2/9 | 30/170 | 期中总结 |
第九周 | 133/438 | 2/11 | 30/200 | 了解了Linux操作系统提供的基本I/O服务 |