20145325张梓靖 《信息安全系统设计基础》第9周学习总结
教材学习内容总结
- UNIX I/O 在UNIX系统中有一个说法,一切皆文件。所有的I/O设备,如网络、磁盘都被模型化为文件,而所有的输入和输出都被当做对相应文件的读和写来执行。这种将设备映射为文件的方式,允许UNIX内核引出一个简单、低级的应用接口,称为UNIX I/O,这使得所有的输入和输出都能以一种统一且一致的方式来执行:打开文件、改变当前的文件位置、读写文件、关闭文件。
- 打开和关闭文件
int open(char *filename,int flags,mode_t mode)
,其中打开标志flags有三种基本标志:O_RDONLY、O_WRONLY、O_RDWR。也可以和其他三种(O_CREAT、O_TRUNC、O_APPEND)组合使用。mode参数指定了新文件的访问权限位。 - 读和写文件 在系统I/O中读写文件用的系统函数为read()和write()函数来执行:read函数从描述符为fd的当前文件位置拷贝最多n个字节到存储器位置buf。返回值-1表示一个错误,而返回值0表示EOF。否则,返回值表示的是实际传送的字节数量。而write函数从存储器位置buf拷贝至多n个字节到描述符fd的当前文件位置。返回值要么为-1要么为写入的字节数目。
- 用RIO包健壮地读写 RIO:1.无缓冲的输入输出函数(直接在存储器和文件之间传送数据,没有应用级缓冲,它们对将二进制数据读写到网络和从网络读写二进制数据尤其有用),对同一个描述符,可以任意交错地调用rio_readn和rio_writen;2.带缓冲的输入函数,对同一个描述符,可以任意交错地调用rio_readnb和rio_readineb。
- 读取文件元数据 应用程序能够通过调用stat和fstat函数检索到关于文件的信息(有时也称为文件的元数据),若成功,返回0,若出错则为-1.stat以一个文件名为输入,并且填充buf结构体。fstat函数只不过是以文件描述符而不是文件名作为输入。stat结构体中,st_size成员包含了文件的字节大小,st_mode为文件访问许可位。UNIX提供的宏指令根据st_mode成员来确定文件的类型:S_ISREG(),这是一个普通文件;S_ISDIR(),这是一个目录文件;S_ISSOCK()这是一个网络套接字。
- 共享文件 内核用三个相关的数据结构来表示打开的文件:描述符表,文件表,v-node表。
- I/O重定向 通过
dup2
函数,对描述符表表项进行拷贝覆盖,实现重定向。 - 错误处理 系统级函数调用,3种不同风格的返回错误:Unix风格的、 Posix风格的、 DNS风格的。
教材学习中的问题和解决过程
- 问题: 例如 write函数,其中的第2个参量定义为了“const void”,但对 read函数却只是直接的定义为“void”,
const
有什么作用,为什么要用它 - 解决过程 通过上网查找,知道
const
是作为修饰常类型,即其修饰的值不允许修改,但在 write函数里面有什么意义确实不太明白 - 问题:
rio_readn
与rio_writen
中nread=0
有什么作用 - 解决过程 由
nleft>0
可以知道,当errno==EINTR
时,nread=0
,则一直循环,即暂停之意 - 问题: 对10.1中“改变当前的文件位置”,“文件位置”指的是文件存放的位置,还是文件里面的位置(类似光标在文件里的某位置)
- 解决过程 通过继续后面的教材阅读(10.6、10.7),能够基本清楚的判定“文件位置”指的是文件里面的某一位置
- 问题: 读缓冲区格式代码里(p602),2个char类型的变量怎么理解
- 解决过程 通过后面的
rio_read
函数代码(p603),清楚知道对rio_buf[RIO_BUFSIZE]
可以理解为缓存空间,同样的rio_bufptr
可以理解为缓冲空间里的指引的地址(类似于文件位置)
本周代码托管
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 3500行 | 25篇 | 300小时 | |
第一周 | 70/70 | 2/2 | 22/22 | |
第二周 | 150/220 | 1/3 | 23/45 | |
第三周 | 160/380 | 1/4 | 25/70 | |
第五周 | 250/630 | 1/5 | 30/100 | |
第六周 | 25/655 | 1/6 | 27/127 | |
第七周 | 30/685 | 2/8 | 25/152 | |
第八周 | 0/685 | 1/9 | 20/172 | |
第九周 | 61/685 | 1/10 | 22/194 |