20145337 《信息安全系统设计基础》第九周学习总结
教材学习内容总结
Unix I/O
- 输入/输出 是在主存和外部设备之间拷贝数据的过程
- 一个Unix文件就是一个m字节的序列:B0、B1、、、Bk、、、Bm-1,如网络、磁盘、终端,都被模式化为文件,所有的输入输出都被当作对相应文件的读和写来执行。
- 打开文件:内核返回描述符,以标识文件。内核记录有关打开文件的所有信息。unix创建每个进程都有:标准输入、标准输出、标准错误
- 改变当前的文件位置:这个文件位置是从文件开头起始的字节偏移量
- 读写文件
- 关闭文件
打开、关闭文件
int open(char*filename, int flags,mode_t mode);
- open 函数将filename转换为一个文件描述符,并且返回描述符数字
- flags参数指明进程打算如何访问
- mode参数指定新文件的访问权限
int close(int fd);
- 进程通过调用close函数关闭一个打开的文件,关闭一个已关闭的描述符会出错
读和写文件
- 应用程序是通过分别调用read和write函数来执行输入和输出。
- RIO,会自动处理上文中所述的不足值。提供了无缓冲的输入输出函数和带缓冲的输入函数
- RIO无缓冲的输入输出函数:调用rio_readn和rio_writen
- RIO带缓冲的输入函数:rio_readlineb,从一个内部读缓冲区拷贝一个文本行
- 每打开一个描述符都会调用一次rio_readinitb函数,它将描述符fd和地址rp处的一个类型为rio_t的读缓冲区联系起来
- 对同一描述符,对rio_readlineb和rio_readnb的调用可以任意交叉进行。然而对这些带缓冲的函数调用却不应和无缓冲的rio_readn交叉使用
读取文件元数据
- 应用程序能够通过调用stat和fstat函数,检索到关于文件的元数据
- stat以文件名作为输入。fstat以文件描述作为输入
- st_size成员 包括文件的字节数大小。st_mode成员编码了文件的访问许可位和文件类型
- 普通文件包括某种类型的二进制或文本数据
- 目标文件包含关于其他文件的信息
- 套接字是一种用来通过网络与其他进程通信的文件
- Unix提供的宏指令根据st_mode成员来确定文件的类型
- 宏指令:S_ISREG() 普通文件?二进制或文本数据
- 宏指令:S_ISDIR() 目录文件?包含其他文件的信息
- 宏指令:S_ISSOCK() 网络套接字?通过网络和其他进程通信的文件
教材学习中的问题和解决过程
- man -k key1 | grep key2| grep 2 : 根据关键字检索系统调用
- grep -nr XXX /usr/include :查找宏定义,类型定义
-
man cp
-
在帮助文档中,通过/+关键词查找,向后查找:n,向前:N
-
grep -r递归查找-v反向查找
-
本周代码托管截图
其他(感悟、思考等,可选)
本周的学习任务较轻松,I/O比较好理解,不过老师留在教材导读中的问题,有点二丈和尚摸不着头脑
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第九周 | 150/200 | 2/2 | 8/20 | 学习I/O |