20145309信息安全系统设计基础第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:

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

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

时间: 2024-10-07 03:15:31

20145309信息安全系统设计基础第12周学习总结后篇的相关文章

20145309信息安全系统设计基础第11周学习总结后篇

进程 异常是允许操作系统提供进程的概念所需要的基本构造块. 进程:一个执行中的程序的实例. 上下文是由程序正确运行所需要的状态组成的,这个状态包括存放在存储器中的程序的代码和数据,它的栈.通用目的寄存器的内容.程序计数器.环境变量以及打开文件描述符的集合. 进程提供给应用程序的关键抽象: 一个独立的逻辑控制流,独占地使用处理器: 一个私有的地址空间,独占地使用存储器系统. 并发流:一个逻辑流的执行在时间上与另一个流重叠. 并发:多个流并发地执行的一般现象. 多任务:一个进程和其他进程轮流运行的概

20145309信息安全系统设计基础第11周学习总结前篇

教材学习内容总结 异常 异常:处理器中的变化(事件)触发从应用程序到异常处理程序的突发的控制转移 异常处理程序:在任何情况下,当处理器检测到有事件发生时,它就会通过一张叫做异常表的跳转表进行一个间接过程调用,到一个专门处理这类时间的操作系统子程序 当 exception handler处理结束之后,会有三种结果: ·处理程序将控制返回给事件发生的时候正在执行的指令 ·处理程序将控制返回给如果没有发生异常将会执行的下一条指令 ·处理程序终止被终端的程序 所有的到Linux系统调用的参数都是通过寄存

20145309信息安全系统设计基础第10周学习总结前篇

教材学习内容总结 附录A--错误处理 (1).Unix风格的错误处理:函数返回值包括错误代码,也包括有用的结果 (2).Posix风格的错误处理:返回0表示成功,返回非0表示失败:任何有用的结果都返回在通过引用传递进来的函数参数中. (3).DNS风格的错误处理:函数失败时返回NULL指针,并设置全局变量h_errno 标准I/O(高级输入输出函数) fopen/fclose:打开和关闭文件 fread/fwrite:读和写字节 fgets/fputs:读和写字符串 scanf/printf:复

20145309信息安全系统设计基础第2周学习总结

教材学习内容总结 第一章 计算机系统漫游 (每小节基本内容概括) 1.1 信息就是位+上下文 文本文件:由ASCII字符构成的文件 二进制文件:其他文件 在不同的上下文中,一个同样的字节序列可能表示不同信息 1.2 程序被其他程序翻译成不同的格式 从源文件到目标文件的转化是由编译器驱动程序完成gcc -o hello hello.c 编译系统:预处理器.编译器.汇编器和链接器 预处理阶段:.c->.i,根据以字符#开头的命令,修改原始的C程序 编译阶段:.i->.s,汇编语言程序 汇编阶段:.

20145309信息安全系统设计基础第8周学习总结上

考试知识汇总 1.判断:实验楼环境中所有的默认系统用户名和密码均为 shiyanlou.(x ). 2.填空:Linux Bash中,Ctrl+a快捷键的作用是(将光标移至输入行头,相当于Home键). 3.判断:Linux Bash中, 可以使用man printf查看C语言中printf函数的帮助文档. (x) 4.填空:在Ubuntu中,使用(sudo apt-get install ddd)来安装ddd软件. 5.填空:在 Linux 里面可以使用使用(chmod)命令修改文件的权限.

20145309信息安全系统设计基础第9周学习总结上

教材学习内容总结 输入/输出(I/O)是在主存和外部设备之间拷贝数据的过程. Unix I/O是一个简单低级的应用接口,可以把所有的输入输出当作对文件的读写来执行. 打开文件:标准输入描述符为0.标准输出描述符为1.标准错误描述符为2. 改变当前的文件位置:文件位置是从文件开头起始的字节偏移量. 读写文件:从当前文件位置开始.当大于文件长度的时候出发EOF条件. 关闭文件. open函数 flages参数指明进程打算如何访问该文件 mode参数指定新文件的访问权限位 read函数:从描述符为fd

20145309信息安全系统设计基础第8周学习总结下

总结 知识点总结 常用的Linux命令 Linux中命令格式为:command [options] [arguments]其中[]表示是可选的,即组成结构为:命令 [选项] [参数] man命令 man命令是Linux下的帮助指令,通过man指令可以查看Linux中的指令帮助.配置文件帮助和编程帮助等信息. 常用选项: -a:在所有的man帮助手册中搜索 -k:根据关键字搜索联机帮助,是一种模糊搜索 -f:关键字精确搜索,等价于whatis指令,显示给定关键字的简短描述信息 -P:指定内容时使用

信息安全系统设计基础 第12周学习笔记

第八章代码 exec1: execvp()会从PATH 环境变量所指的目录中查找符合参数file 的文件名,找到后便执行该文件,然后将第二个参数argv传给该欲执行的文件.如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno中.在结果中我们可以看出exevp函数调用成功没有返回,所以没有打印出“* * * ls is done. bye”. exec2: exec1的区别就在于exevp函数的第一个参数,exec1传的是ls,exec2直接用的arglist[0],不过由定

20145309信息安全系统设计基础第9周学习总结下

1.打开文件 应用程序向内核发出请求→要求内核打开相应的文件→内核返回文件描述符 文件描述符:一个小的非负整数,用来在后续对此文件的所有操作中标识这个文件.有三个已经被指定了的如下: 标准输入--0(STDIN_FILENO) 标准输出--1(STDOUT_FILENO) 标准错误--2(STDERR_FILENO) 括号中是常量表示形式,使用时需要加头文件<unistd.h> 也就是说,在Unix生命周期一开始,0.1.2就被占用,以后的open只能从3开始--习题10.1. 在UNIX下还