2018-2019-1 20165306 《信息安全系统设计基础》第六周学习总结
教材学习内容总结
10.1Unix I/O
- 所有的I/O设备都被模型化为 文件 ,而所有的输入和输出都被当做对相应文件的读和写来执行。
- Linux shell创建的每个进程开始时都有三个 ** 打开 ** 的文件:标准输入(描述符为0,STDIN_FILENO)、标准输出(描述符为1,STDOUT_FILENO)、标准错误(描述符为2,STDERR_FILENO)。
10.2文件
- 普通文件:文本文件是只含有ASCII或Unicode字符的普通文件;二进制文件是所有其他的文件。 对内核而言 ,文本文件和二进制文件没有区别。
- 目录:用
mkdir
创建一个目录,用ls
查看其内容,用rmdir
删除该目录。 - 套接字:用来与另一个进程进行跨网络通信的文件。
- Linux内核将所有文件都组织成一个目录层次结构,由名为/(斜杆)的根目录确定。可以用
cd
命令来修改shell中的当前目录。 - 绝对路径名:以一个斜杆开始,表示从根节点开始的路径。 - 相对路径名:以文件名开始,表示从当前工作目录开始的路径。
10.3打开和关闭文件
- open函数:将filename转换为一个文件描述符,并且返回描述符数字。返回的描述符总是在进程中当前没有打开的最小描述符。
O_RDONLY
只读,O_WEONLY
只写, O_RDWR
可读可写, O_CREAT
创建, O_TRUNC
截断,O_APPEND
设置到结尾
- mode参数:指定了新文件的访问权限位。
10.4读和写文件
- 在某些情况下,read和write传送的字节比应用程序要求的要少。这些不足值 不 表示有错误,出现这样情况的原因有: - 读时遇到EOF。 - 从终端读文本行。 - 读和写网络套接字。
10.6读取文件元数据
- stat函数以一个文件名作为输入,fstat以文件描述符作为输入。
- st_size成员包含了文件的字节数大小,st_mode成员则编码了文件访问许可位和文件类型。
10.8共享文件
- 描述符表:每个打开的描述符表项指向文件表中的一个表项。
- 文件表:打开文件的集合是由一张文件表来表示的,所有的进程共享这张表,包括文件位置、引用计数、一个指向v-node表中对应表项的指针。
- v-node表:所有的进程共享这张v-node表,每个表项包含stat结构中的大多数信息,包括st_mode和st_size成员。
10.9I/O重定向
linux>ls>foo.txt
将标准输出重定向到磁盘文件foo.txt。int dup2(int oldfd,int newfd)
复制描述符表项oldfd到描述符表表项newfd,覆盖描述符表项newfd以前的内容。如果newfd已经打开了,dup2会在复制oldfd之前关闭newfd。
10.10标准I/O
- 对于程序员而言,一个流就是一个指向FILE类型的结构的指针。
- 类型为FILE的流是对文件描述符和流缓冲区的抽象。
10.11综合:我该使用哪些I/O函数?
- 只要有可能就使用标准I/O。
- 不要使用scanf或rio_readlineb来读二进制文件。
- 对网络套接字的I/O使用RIO函数。
教材问题及解决
理解:
Read(fd2,&c,1);
已读取了f2的第一位f,
Dup2(fd2,fd1);
将fd1重定向到了fd2,
Read(fd1,&c,1);
相当于读取的是fd2的第二位o。
上周考试错题总结
- 在任何时刻,所有的读/写头都位于同一个柱面上。
- 磁盘以扇区大小的块来读写数据。
- 对扇区的访问时间有三个主要的部分:寻道时间、旋转时间、传送时间,访问时间主要是寻道时间和旋转延迟。