首页 > 代码库 > 20145331《信息安全系统设计基础》第9周学习总结

20145331《信息安全系统设计基础》第9周学习总结

20145331《信息安全系统设计基础》第9周学习总结

教材学习内容总结

10.1 Unix I/O

Unix中所有的I/O设备都被模型化为文件,而所有的输入和输出都被当做对相应文件的读和写来执行。

10.2打开关闭文件

1、打开文件:

int open(char *filename, int flags,mode_t mode);

其中,括号内第一个参数为文件名,第二个参数为访问文件的方式(3种),第三个参数为访问权限位(mode&~umask)。

2、关闭文件:

int close(int fd);   

10.3读写文件

读:ssize_t read(int fd, void *buf, size_t n);
写:ssize_t write(int fd, const void *buf, size_t n);

注意ssize_t和size_t有区别。

10.3RIO包读写

1、RIO包会自动处理不足值。

2、分两类函数:无缓冲的输入输出函数 (二进制)、带缓冲的输入函数(二进制+文本行)。

3、第一类读写:

读:ssize_t rio_readn(int fd,void *usrbuf,size_t n);
写:ssize_t rio_writen(int fd,void *usrbuf,size_t n);

4、第二类读(三个函数):

带缓冲顾名思义就先联系缓冲区:
void rio_readinitb(rio_t *rp,int fd);
接着读:
ssize_t rio_readlineb(rio_t *rp,void *usrbuf,size_t maxlen);
ssize_t rio_writen(rio_t *rp,void *usrbuf,size_t n);

10.5读文件元数据

1、文件元就是文件信息,调用stat和fstat函数检索到关于文件的信息

int stat(const char *filename,struct stat *buf);
int fstat(int fd,struct stat *buf);

2、其中st_size成员包含了文件的字节大小。st_mode为文件访问许可位。

10.6共享文件

1、三个结构:
描述符表:独立 文件表:多部分组成,进程共享。 v-node表:进程共享。 2、关键:每个描述符有自己的文件位置,不同操作符的读就可以从文件不同位置获取数据。

10.7I/O重定向

1、使用dup2函数重定向。

int dup2(int oidfd,int newfd);

2、这节看了很久,从例子入手后看懂了:以前两个描述符指向A、B两个文件,现在调用上述函数后,都指向一个文件(假如说是B),A就被关闭了,其文件表和v-node表删除,B的引用计数增加;以后的数据重定向到文件B。

10.8标准I/O

1、

标准I/O库(libc):高级输入输出函数
fopen/fclose:打开和关闭文件
fread/fwrite:读和写字节
fgets/fputs:读和写字符串
scanf/printf:复杂格式化的I/O函数

2、每个程序开始时都有三个打开的流:

stdin:标准输入
stdout:标准输出
stderr:标准错误

教材学习中遇到的问题:

10.1:

open函数返回值:若成功则为新文件的描述符,若出错则为-1

每个进程开始时都会打开三个文件:标准输入、标准输出、标准错误。它们的描述符分别为0、1、2。所以,fd1返回的描述符为3。之后调用了close函数,释放描述符3。所以fd2的返回值也就是描述符为3

10.2:

如图10-12。fd1和fd2对应不同的描述符表,也对应不同的文件表项,但是它们对应的v-note表一样,都是打开foobar.txt。所以读foobar的第一个字节,输出f

10.3:

如图10-13。首先你得知道子进程就相当于对父进程的复制,ok所以父进程中描述符表、文件表、v-note表对应关系和子进程一样。描述符fd在父子进程中指向同一个文件表项。因此子进程读完后,父进程读到的为o,输出o

10.4:

dup2(A,B)指将B重新定向到A,也是把A拷贝到B 标准输入的描述符为0

10.5:

dup2(fd2,fd1)将fd2拷贝到fd1,fd1被重新定向为fd2。所以再次执行read后,输出为o

代码中遇到的问题:

一开始编译书上p598的代码发现并没有“csapp.h”:

技术分享

解决办法: 看到书p597的代码上面的头文件,进行尝试,成功编译并运行:

技术分享

这三个头文件和“csapp.h”等价。

代码托管:

参照老师的评论本周代码托管做成了链接形式:

点我点我!

并用相关指令进行了统计:

技术分享

心得体会:

内容看似很少,不过比以前的难懂,同样花了很多时间看书,我的心得是看这一章一定要学会找不同,这很关键;从下周起想重新学一下c语言,感觉现在看书上一些基本的代码很吃力。

学习进度条

 代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
目标 5000行 30篇 400小时  
第7周 67/472 1/10 20/151  

20145331《信息安全系统设计基础》第9周学习总结