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  
时间: 2024-10-03 23:53:29

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

20145216 史婧瑶《信息安全系统设计基础》第一周学习总结

20145216 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 Linux基础 1.ls命令 ls或ls .显示是当前目录的内容,这里“.”就是参数,表示当前目录,是缺省的可以省略.我们可以用ls -a .显示当前目录中的所有内容,包括隐藏文件和目录.其中“-a” 就是选项,改变了显示的内容.如图所示: 2.man命令 man命令可以查看帮助文档,如 man man : 若在shell中输入 man+数字+命令/函数 即可以查到相关的命令和函数:若不加数字,那man命令默认从数字较

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

20145311 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 常用的部分命令 CTRL+SHIFT+T:新建标签页,编程时有重要应用: ALT+数字N:终端中切换到第N个标签页,编程时有重要应用: Tab:终端中命令补全,当输入某个命令的开头的一部分后,按下Tab键就可以得到提示或者帮助完成: CTRL+C:中断程序运行 Ctrl+D:键盘输入结束或退出终端 Ctrl+S: 暂定当前程序,暂停后按下任意键恢复运行 Ctrl+A: 将光标移至输入行头,相当于Home键 Ctrl+E

20145216史婧瑶《信息安全系统设计基础》第九周学习总结

20145216史婧瑶<信息安全系统设计基础>第九周学习总结 教材内容总结 第十章 系统级I/O 输入/输出(I/O)是在主存和外部设备之间拷贝数据的过程. 第一节 Unix I/O 这一节涉及到操作系统的基本抽象之一--文件.也就是说,所有的I/O设备都被模型化为文件,而所有的输入输出都被当做对相应文件的读/写.相关的执行动作如下: 1.打开文件: 应用程序向内核发出请求→要求内核打开相应的文件→内核返回文件描述符 文件描述符:一个小的非负整数,用来在后续对此文件的所有操作中标识这个文件.有

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

20145311 <信息安全系统设计基础>第二周学习总结 教材学习内容总结 重新学习了一下上周的一部分命令:grep main wyx.c(grep的全文检索功能)ls > ls.txt :ls内容输出到文本find pathname -mtime -n/+nfind -size -n/+n (find的功能还是比较强大) 简单地学习了一下vim编辑器,跟着vimtutor简单地学了一些,在linux bash中使用vim能够极大地提高效率, vim的用法比较多,只学习了其中简单的一部分

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

20145339顿珠达杰<信息安全系统设计基础>第一周学习总结 ◆ Linux是一个操作系统.如果使用GUI,Linux和Windows没有什么区别.Linux学习应用的一个特点是通过命令行进行使用. 物理机系统上可以通过使用[Ctrl]+[Alt]+[F1]-[F6]进行终端和图形界面切换,在线实验环境中按下[Ctrl]+[Alt]+[F7]来完成切换.普通意义上的 Shell 就是可以接受用户输入命令的程序,Unix/Linux 操作系统下的 Shell 既是用户交互的界面,也是控制系统的

2017-2018-1 20155228 《信息安全系统设计基础》第九周学习总结

2017-2018-1 20155228 <信息安全系统设计基础>第九周学习总结 教材学习内容总结 常见的存储技术 RAM 随机访问存储器(Random-Access Memory, RAM)分为两类:静态的和动态的.静态 RAM(SRAM)比动态RAM(DRAM)更快,但也贵得多.SRAM用来作为高速缓存存储 器,既可以在CPU芯片上,也可以在片下.DRAM用来作为主存以及图形系统的帧缓冲 区.典型地,一个桌面系统的SRAM不会超过几兆字节,但是DRAM却有几百或几千兆 字节. SRAM将每

2017-2018-1 20155332 《信息安全系统设计基础》第九周学习总结

2017-2018-1 20155332 <信息安全系统设计基础>第九周学习总结 教材学习内容总结 简单模型中,存储器是一个线性的字节数组.真实模型中,是一个具有不同容量,成本,访问时间的存储层次结构(存储器山) 程序的局部性很重要,对程序性能有很重要的影响. 计算机系统一个基本而持久的思想,如果你理解了系统是如何将数据在存储器层级结构中上下移动,你就可以编写程序,让数据存储在层次结构中较高的地方,从而CPU可以更快的访问到他们. 编写程序实现功能是最简单的,如何让编写的程序拥有最高的性能,例

2017-2018-1 20155227 《信息安全系统设计基础》第九周学习总结

2017-2018-1 20155227 <信息安全系统设计基础>第九周学习总结 教材学习内容总结 第六章 随机访问存储器 随机访问存储器分为:静态RAM(SRAM)和动态RAM(DRAM),静态RAM(SRAM)比动态RAM(DRAM)更快,但也贵很多. (1)静态RAM SRAM将每个位存储在一个双稳态的存储器单元里,每个单元是用一个六晶体管电路来实现的. 属性:它可以无限制地保持在两个不同的电压配置或状态之一.其他任何状态都是不稳定的. 特点:由于SRAM的双稳态特性,只要有电,它就会永

2017-2018-1 20155334 《信息安全系统设计基础》第九周学习总结

2017-2018-1 20155334 <信息安全系统设计基础>第九周学习总结 学习目标: 了解常见的存储技术(RAM.ROM.磁盘.固态硬盘等) 理解局部性原理 理解缓存思想 理解局部性原理和缓存思想在存储层次结构中的应用 高速缓存的原理和应用 教材学习内容总结 一.常见的存储技术: 基本的存储技术包括随机存储器(RAM).非易失性存储器(ROM)和磁盘. 1. RAM分静态RAM(SRAM)和动态RAM(DRAM). 2. SRAM快些,主要用做CPU芯片上的高速缓存,也可以用作芯片下的

2017-2018-1 20155331 《信息安全系统设计基础》第九周学习总结

2017-2018-1 20155331 <信息安全系统设计基础>第九周学习总结 教材学习内容总结 存储器层次结构 存储技术 随机访问存储器 随机访问存储器分为:静态的SRAM.动态的DRAM 静态RAM: SRAM的特点:存储器单元具有双稳态特性,只要有电就会永远保持它的值,干扰消除时,电路就会恢复到稳定值. 动态RAM: DRAM的特点:每一位的存储是对一个电容的充电:对干扰非常敏感. 用途:数码照相机和摄像机的传感器 DRAM存储不稳定的应对机制: 存储器系统必须周期性地通过读出,或者重