20145314郑凯杰《信息安全系统设计基础》第9周学习总结 PART B
明确教材学习目标
-
注意每个系统调用的参数、返回值,会查帮助文档
-
阅读教材,完成课后练习(书中有参考答案),考核:练习题把数据变换一下
-
学习视频,掌握两个重要命令:
man -k key1 | grep key2| grep 2 : 根据关键字检索系统调用
grep -nr XXX /usr/include :查找宏定义,类型定义 -
教材中相关代码运行、思考一下,读代码的学习方法见「代码驱动的程序设计学习」。
-
代码重点:课程演示代码
这些内容在上一周的博客中我已经概括了,链接如下:
http://www.cnblogs.com/5314zkj/p/6052730.html
教材学习内容总结
本章知识点补充
标准I/O
标准I/O库将一个打开的文件模型化为一个流,也就是一个指向FILE类型的结构的指针。
#include <stdio.h>
extern FILE *stdin; /*标准输入,文件描述符为0*/
extern FILE *stdout; /*标准输出,文件描述符为1*/
extern FILE *stderr; /*标准错误,文件描述符为2*/
类型为file的流是对文件描述符和流缓冲区的抽象,目的是使开销较高的Unix I/O系统调用的数量尽可能小。
错误处理
错误处理包装函数:给定某个基本的系统级函数foo,定义一个有相同参数的包装函数Foo。包装函数调用基本函数并检查错误。如果发现错误就打印一条信息并终止进程,否则返回调用者。即如果没有错误,包装函数的行为与基本函数完全一样。
包装函数被封装在一个源文件(csapp.c)中,被编译和链接到每个程序中。
Unix风格的错误处理
函数返回值既包括错误代码又包括有用的结果。如果遇到错误就返回-1,并将全局变量errno设置为指明错误原因的错误代码。如果成功就返回有用的结果。
if((pid = wait(NULL)) < 0) {
fprintf(stderr,"wait error:%s
",strerror(errno));
exit(0);
}
Posix风格的错误处理
只用返回值来表明成功(0)或者失败(非0)。任何有用的结果都返回在通过引用传递进来的函数参数中。
if((retcode = pthread_create(&tid,NULL,thread,NULL)) != 0) {
fprintf(stderr,"pthread_create error:%s
",strerror(retcode));
exit(0);
}
DNS风格的错误处理
在失败时返回NULL指针,并设置全局变量h_errno。
if((p = gethostbyname(name)) == NULL) {
fprintf(stderr,"gethostbyname error:%s
:",hstrerror(h_errno));
exit(0);
}
复习上课内容
老师在上课时之间演示过man -k的使用 ,这里对read grep进行搜索
图5:
代码调试中的问题和解决过程
问题1 头文件出错###
图1:
编译书上代码时,头文件出错。
原因:csapp.h
不是计算机自带的
从网上下载后,问题解决。
csapp.h和csapp.c:
下载地址http://csapp.cs.cmu.edu/public/code.html:
将下载好的两个文件移到/usr/include
文件夹
代码上传及托管情况
图2:
图3:
图4:
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第七周 | 1300/1750 | 11/11 | 140/140 | |
第八周 | 1700/2000 | 13/13 | 160/160 | |
第九周 | 2000/2400 | 14/15 | 180/180 | |
第十周 | 2500/2800 | 15/17 | 0/200 |