20145235《信息安全系统设计基础》第十二周学习总结
指针和声明
C语言中变量的声明类型
指针数组
如:int *daytab[13]
数组指针
int (*daytab1)[13]
指针函数
int *comp()
函数指针
int (*comp1)()
类型识别方法:右左右左法
信号处理
信号
- 信号时UNIX中所使用的进程通信的一种最古老的方法。
- 信号时在软件层次上对终端机制的之中模拟,它是比较复杂的通信方式,用于通知进程有某时发生,一个进程接收到一个信号与处理器收到的一个中断请求效果上可以说是一样的。
- Linux中的信号
信号信息:
- kill -l可以查看各种信号信息。每个信号都由一个编号和一个宏定义。
-
- man 7 signal:可以了解,信号在什么条件下产生,默认的处理动作是什么。
信号生命周期
信号产生
- 用户产生
- 硬件产生
- 进程产生:如kill -2 5245
- 内核产生
信号注册
信号注销
信号处理
默认操作
忽略信号
捕捉信号
man -k signal
man 2 signal 查看signal的帮助文档
sigdemo1.c
通过代码可以得知,程序执行10秒,在十秒内检测信号并捕捉,最后打印所捕捉的信号。运行结果:
可以看出,第一行并没有有个一,并不是我自己输入的,而是标准输出。其他结果和代码分析一致。
sigdemo2.c
通过signal函数,可以得知,信号由键盘输入产生,SIG-IGN代表忽SIGINT,while是个死循环,感觉这个代码没什么意义。运行看看:
这个程序确实很无聊,通过键盘无法终止死循环,也就是把键盘终止的命令也给忽略了,若把信号处理参数改为SIG-DFL便可通过键盘终止。
signal()函数的不足:
- 不知道信号被发送的原因
- 信号处理过程中不能安全地阻塞其他信号
sigaction()函数:
- 在信号处理程序被调用时,系统建立的新信号屏蔽字会自动包括正被递送的信号。因此保证了在处理一个给定的信号时,如果这种信号再次发生,那么它会被阻塞到对前一个信号的处理结束为止
- 响应函数设置后就一直有效,不会重置