• 20145314郑凯杰《信息安全系统设计基础》第9周学习总结 PART B


    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

    参考资料

  • 相关阅读:
    Linux-线程同步(day14续)
    Linux之线程(day14)
    Linux-网络编程-UDP网络编程(day13续2)
    ES6 模块加载
    let与var声明区别
    vue 常用指令v-if v-else v-show v-for
    动态路由的意义,以及路由重定向
    前端路由的理解
    socpe 与 包的引入
    VUE 组件注册(全局、局部)
  • 原文地址:https://www.cnblogs.com/5314zkj/p/6059991.html
Copyright © 2020-2023  润新知