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

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

教材学习内容总结

前三周博客链接

视频学习内容

指针与声明

  • 声明

    1、C语言中变量的声明

      类型(type)
      声明符(declarator)
    

    2、最简单的声明是变量

    3、指针数组

    • 指针数组是一个数组
    • 数组里的元素都是指针
    • 例:int *daytab[13]

    4、数组指针

    • 数组指针是一个指针
    • 指针指向一个类型和元素个数都固定的数组
    • 例:int (*daytab1)[13]

    5、指针函数

    • 指针函数是函数
    • 函数的返回值是指针类型
    • 例:int *comp()

    6、函数指针

    • 函数指针是指针
    • 指针指向函数
    • 函数名就是函数指针
    • 例:int (*comp1)()

    7、类型识别法:右左右左法

      从变量名开始,先右再左地,交替地一个一个向外看,在纸上写下:“变量是”
      若向右遇到左圆括号,在纸上写下:“函数,参数是”,并用同样的方法处理括号中每一个参数——在纸上写下:“返回”
      若向右遇到方括号,在纸上写下:“数组,长度为{方括号的内容},元素类型为”
      若向右遇到右圆括号,什么也不做
      若向左遇到*,在纸上写下:“指针,指向”
      若向左遇到任何类型,在纸上写下对应的类型名
    

    8、自定义类型:typedef

    9、char ((x())[])()

    分析:x是函数,无参数,返回指针,指向数组,长度不确定,元素类型为指针,指向函数,无参数,返回void

    10、char ((x[3])())[5]

    分析:x是数组,长度为3,元素类型为指针,指向函数,无参数,返回指针,指向数组,长度为5,元素类型为char

信号处理

  • 信号

    1、信号是UNIX中使用的进程通信的一种最古老的方法

    2、信号是在软件层次上对中断机制的一种模拟,它是比较复杂的通信方式,用于通知进程有某事件发生,一个进程收到一个信号与处理器收到一个中断请求效果上可以说是一样的

  • 查看信号信息

    1、命令kill -l

    每个信号都有一个编号和一个宏定义名称,宏定义可以在signal.h中找到

    2、命令man 7 signal

    查看信号的产生条件、默认处理动作

  • 信号生命周期:信号产生、信号注册、信号注销、信号处理

    1、信号产生

    • 用户产生

    例:在终端中按下Ctrl+C产生SIGINT信号,可以通过stty -a查看可以产生信号的按键组合

    • 硬件产生

    硬件异常产生信号,例:当前进程执行了除以0的指令

    • 进程产生

    例:可在shell进程下,使用命令 kill -信号标号 PID,向指定进程发送信号。

    • 内核产生

    例:闹钟超时产生SIGALRM信号

    2、信号处理

    • 捕捉信号

命令:man -k signal可以检索相关函数,通过man 2 signal可以查看signal的帮助文档

signal(SIGINT,f)演示了如何捕捉信号,这个程序捕捉了中断信号

void f(int signum)演示了如何定义信号处理函数

  • 忽略信号

忽略中断信号:把信号处理函数指针传为SIG_IGN

通过grep命令查看SIG_IGN,表示无返回值的函数指针,指针值为1

  • 默认操作

默认信号:SIG_DFL是默认信号的处理程序

通过grep命令查看SIG_DFL,表示无返回值的函数指针,指针值为0

把SIG_IGN改成SIG_DFL

  • 多信号处理

-SIGX打断SIGX的情况处理方法:

	1、递归,调用同一个处理函数
	2、忽略第二个信号
	3、阻塞第二个信号知道第一个处理完毕
  • signal与sigaction

    1、signal:

      不知道信号被发送的原因
      信号处理过程中不能安全地阻塞其他信号
    

    2、sigaction:

    在信号处理程序被调用时,系统建立的新信号屏蔽字会自动包括正被递送的信号。因此保证了在处理一个给定的信号时,如果这种信号再次发生,那么它会被阻塞到对前一个信号的处理结束为止

    响应函数设置后就一直有效,不会重置

代码调试中的问题和解决过程

  • 问题1:git 上传代码时突然出现如下错误:

      error: object file .git/objects/2a/xxxxxx is empty  
      fatal: loose object xxxxxx (stored in .git/objects/2a/xxxxxx) is corrupt
    

    我一直都只是每周添加一个文件夹存储本周内容,格式、之前的内容什么的从来没有改变过,不知道为什么突然不能正常git了。

  • 解决方法:我把错误粘贴到网上找到了解决方法,如下:

      $ rm -fr .git  
      $ git init  
      $ git remote add origin your-git-remote-url  
      $ git fetch  
      $ git reset --hard origin/master  
      $ git branch --set-upstream-to=origin/master master  
    

    按照上面重新初始化了git仓库,然后git pull下来了之前的内容,之后再进行git add .就没有没问题了。

本周代码托管截图

  • 代码托管连接
  • 第1~4周项目分文件夹时弄乱了已删除,从第五周开始存在新项目里。
  • PS:git上学期用还好好的,这学期就总是会出问题,果然当初新建项目时很重要,新建的项目格式有问题之后调整就很费劲,总是会莫名其妙(其实是对git命令的含义不了解)的传不上去,或者全部覆盖(碰见问题按照百度解决时跟自己预期的结果不同)……还好我的代码一直留着,覆盖也只是重新传一次相同的,就是上传时间会改……

本周代码行数统计截图

其他(感悟、思考等,可选)

本周的学习主要是对之前三周学习的复习巩固,之前三周每周的代码学习量都很大,未免遗漏、或是没有深入理解某些代码,老师给的这一周时间,让我们可以查漏补缺,很好的帮助我们弥补了之前学习的漏洞,同时,也对于以了解的代码更为熟悉。视频学习与代码相结合,可以让我们更了解代码的意义,也便于我们求证自己对于代码的理解是否正确,及时更正错误想法。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第零周 0/0 1/1 15/15 安装虚拟机
第一周 0/0 1/2 25/40 学习Linux命令
第二周 62/62 1/3 25/65 学习C编程
第三周 176/238 1/4 20/85 学习数的表示和计算
第五周 57/295 1/5 20/105 学习汇编语言,了解逆向思想
第六周 150/445 1/6 25/130 学习Y86处理器和HCL硬件描述语言
第七周 115/560 1/7 20/150 学习存储器相关知识
第八周 0/560 2/9 30/180 期中总结
第九周 186/746 2/11 20/200 Unix I/O及相关函数
第十周 423/1169 2/13 23/223 man、grep、cp、echostate、fileinfo、filesize、ls、setecho、spwd、testioctl、who代码的理解与调试
第十一周 1034/2203 2/15 31/254 学习异常控制流,并理解、运行老师给的代码
第十二周 29/2232 2/17 23/277 复习前三周内容,继续理解、运行代码,学习signal相关视频

参考资料

原文地址:https://www.cnblogs.com/20145219songge/p/6130911.html