# 2017-2018-1 20155231 《信息安全系统设计基础》第4周学习总结
2017-2018-1 20155231 《信息安全系统设计基础》第4周学习总结
教材学习内容总结
第10章
- read (int fd, void *buf, size_t n)(返回:若成功,则为读的字节数,若EOF则为0,若出错则为-1) write(int fd, const void *buf, size_t n)(返回:若成功则为写的字节数,若出错则为-1)
- 通过调用rioreadn和riowriten函数,应用程序可以在存储器和文件之间直接传送数据。
- 文件的元数据,就是关于文件的信息。
int stat(const char *filename, struct stat *buf); int fstat(int fd, struct stat *buf);
- 描述符表:每个打开的描述符表项指向文件表中的一个表项。 文件表:打开的文件的集合是由一张文件表表示的,所有的进程共享这张表。包括文件位置、引用计数(当前指向该表项的描述符表项数),指向v-node表的指针。 v-node表:包含stat结构中大多数信息。
- I/O重定向:使用dup2函数 dup2函数拷贝了描述符表表项oldfd到描述符表项newfd,覆盖描述符表项newfd的内容。若果newfd已经打开了,dup2会拷贝oldfd之前关闭newfd.
标准的I/O 标准I/O库将一个打开的文件模型化为一个流,一个流就是一个指向FILE类型的结构指针,。stdin\stdout\stdeer分别对应标准输入、标准输出、标准错误。
教材学习中的问题和解决过程
- 问题1:不理解dup2函数的工作原理
- 问题1解决方案:上网查询。 dup2函数跟dup函数相似,但dup2函数允许调用者规定一个有效描述符和目标描述符的id。dup2函数成功返回时,目标描述符(dup2函数的第二个参数)将变成源描述符(dup2函数的第一个参数)的复制品,换句话说,两个文件描述符现在都指向同一个文件,并且是函数第一个参数指向的文件
代码调试中的问题和解决过程
- 问题1:head
- 问题1解决方案:head从文件头读起,默认读取10行并打印。使用常用的文件操作open、close、read接口,设一换行('\n')换行计数器,做换行计数器的累计,累计到需要显示的数量跳出。
主要代码:
if((rfd = open(filename,O_RDONLY)) == -1)
{
fprintf(stderr,"%s:",argv[0]);
return -1;
}
while((rlen = read(rfd,rbuf,READSIZE)) > 0){
for(i=0; i < rlen; i++){
if(rbuf[i] == '\n'){
pb = &rbuf[i];
if(++nent == nline)
break;
}
}
if(nent == nline){
printf("%.*s",pb-&rbuf[0]+1,rbuf);
break;
}
运行截图为:
- 问题2:tail
- 问题2解决方案:tail从文件尾部读起,取距文件尾的n行,取得第n行距离文件尾的位置即可。所以我们仍需要使用常用的文件操作open、close、read接口,一换行计数器,还需要一个距文件尾的偏移量累加量。
主要代码:
//累计距文件尾的偏移量
if(nent != nline+1){
offs2end += len;
}
else {
offs2end += (&rbuf[len-1]-pb);
break;
}
memset(rbuf,0,READSIZE);
}
}
if(offs_seek == -1)
printerr(errno);
return offs2end;
}
运行截图为:
代码托管
上周考试错题总结
结对及互评
点评模板:
- 博客中值得学习的或问题:
- xxx
- xxx
- ...
- 代码中值得学习的或问题:
- xxx
- xxx
- ...
- 其他
本周结对学习情况
- [结对同学学号1](博客链接)
- 结对照片
- 结对学习内容
- XXXX
- XXXX
- ...
其他(感悟、思考等,可选)
这次的实践od、head、tail,之前没有完成,通过上网查找、像同学问询,基本理解解决了问题。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第四周 | 439/1300 | 1/4 | 30/90 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:15小时
-
实际学习时间:11小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)