20145322学号 《信息安全系统设计基础》第9周学习总结(二)

时间:2022-03-16 03:28:03

学号 20145322《信息安全系统设计基础》第X周学习总结(二)

教材学习内容总结

RIO包会自动处理不足值。RIO提供了两类不同的函数:

无缓冲的输入输出函数。这些函数直接在存储器和文件之间传送数据,没有应用级缓冲,他们对将二进制数据读写到网络和从网络读写二进制数据尤其有用。

带缓冲的输入函数。这些函数允许你高效地从文件中读取文本行和二进制数据,这些文件的内容缓存在应用级缓冲区内,类似于像printf这样的标准I/O函数提供的缓冲区。是线程安全的,它在同一个描述符上可以被交错地调用。例如,可以从一个描述符中读一些文本行,然后读取一些二进制数据,接着再多读取一些文本行。

RIO的无缓冲的输入输出函数

通过调用rio_readn和rio_writen函数,应用程序可以在存储器和文件之间直接传送数据。

如果rio_readn和rio_writen函数被一个从应用信号处理程序的发放你会中断,那么每个函数都会手动地重启read或write。为了尽可能有较好地可移植性,允许被中断的系统调用,并在必要时重启他们。

RIO的带缓冲的输入函数

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

用一个程序来计算文本文件中文本行的数量:用read函数来一次一个字节地从文件传送到用户存储器,检查每个字节来查找换行符。这个方法的缺点是效率低,每读取文件中的一个字节都要求陷入内核。

另一种方法是调用一个包装函数(rio_readlineb),它从一个内部读缓冲区拷贝一个文本行,当缓冲区变空时,会自动地调用read重新填满缓冲区。对于既包含文本行也包含二进制数据的文件,我们也提供了一个rio_readn带缓冲区的版本,叫做rio_readnb,它从和rio_readlineb一样的读缓冲区中传送原始字节。

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

文件类型:

普通文件:二进制或文本数据,宏指令:S_ISREG()

目录文件:包含其他文件的信息,宏指令:S_ISDIR()

套接字:通过网络和其他进程通信的文件,宏指令:S_ISSOCK()

3、Unix提供的宏指令根据st_mode成员来确定文件的类型

内核用三个相关的数据结构来表示打开的文件:

描述符表:每个打开的描述符表项指向文件表中的一个表项

文件表:所有进程共享这张表,每个表项包括文件位置,引用计数,以及一个指向v-node表对应表项的指针

v-node表:所有进程共享这张表,包含stat结构中的大多数信息

三种打开文件的类型:

典型:描述符各自引用不同的文件,没有共享

共享:多个描述符通过不同的文件表表项引用同一个文件。(关键思想:每个描述符都有自己的文件位置,对不同描述符的读操作可以从文件的不同位置获取数据)

继承:子进程继承父进程打开文件。调用fork后,子进程有一个父进程描述符表的副本,父子进程共享相同的打开文件表集合,因此共享相同的文件位置

遇到的问题和解决方法

在看教材内容时,很不明白EOF是什么意思?

解决过程:结合前后教材内容以及询问同学后明白,EOF大概意思是一个信号,表示一个文件的结尾。

具体怎样来处理不足值?

解决:通过反复调用read和write。

内核使用三个相关的数据结构来表示打开的文件:

描述符表:每个进程都有它独立的描述符表。 每个打开的描述符表项指向文件表中的一个表项。

文件表:所有进程共享这张表。每个文件表的表项组成包括有当前的文件位置、引用计数、以及一个指向v-node表中对应表项的指针。

直到引用计数为0,内核才会删除该文件表表项。

v-node表:所有进程共享这张v-node表。

2、多个描述符可以通过不同的文件表表项来引用同一个文件。

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

3在内核删除相应文件表项之前,父子进程必须都关闭了它们的描述符。

代码托管截图

20145322学号 《信息安全系统设计基础》第9周学习总结(二)

20145322学号 《信息安全系统设计基础》第9周学习总结(二)

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 100/100 1/1 13/20
第二周 100/200 1/2 15/38
第三周 100/300 1/3 20/60
第五周 70/370 2/5 30/90
第六周 200/570 2/7 40/90
第七周 0/570 2/9 30/120
第八周 0/570 2/9 50/170
第九周 78/570 2/11 40/170