程序的功能是程序运行后进入无限循环当用户按下中断键Ctrl+Z时程序的自定义信号处理函数输出一幅图形当用户按下中断键Ctrl+时产生一批随机数当用户按下中断键Ctrl+C时结束程序运行。运行结果如图所示:利用ubunt linux
环境下的终端实现。
代码如下:
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#include <time.h>
void sigint_handler(int sig)
{
if (sig == SIGINT) {
printf("\nProgram exit.\n");
exit(0);
} else if (sig == SIGQUIT) {
printf("Generating random numbers:\n");
srand(time(NULL));
int i;
for (i = 0; i < 10; i++) {
printf("%d ", rand() % 100);
}
printf("\n");
} else if (sig == SIGTSTP) {
printf(" _______ _________ _ _ ____ \n");
printf("|_ __\\ \\ / /__ __| | | |/ __ \\ \n");
printf(" | | \\ \\_/ / | | | |__| | | | |\n");
printf(" | | \\ / | | | __ | | | |\n");
printf(" | | | | | | | | | | |__| |\n");
printf(" |_| |_| |_| |_| |_|\\____/ \n");
}
}
int main()
{
signal(SIGINT, sigint_handler);
signal(SIGQUIT, sigint_handler);
signal(SIGTSTP, sigint_handler);
printf("Program is running...\n");
while (1) {
// do nothing
}
return 0;
}
运行结果:
Program is running...
^Z _______ _________ _ _ ____
|_ __\ \ / /__ __| | | |/ __ \
| | \ \_/ / | | | |__| | | | |
| | \ / | | | __ | | | |
| | | | | | | | | | |__| |
|_| |_| |_| |_| |_|\____/
^C
Program exit.
解释一下代码:
- 定义了一个信号处理函数
sigint_handler,根据不同的信号类型执行不同的操作。 - 在
main函数中,使用signal函数将三种信号分别与sigint_handler函数关联起来。 - 进入一个无限循环,等待信号的到来。
- 当信号到来时,会自动调用对应的信号处理函数来处理
原文地址: https://www.cveoy.top/t/topic/fTOg 著作权归作者所有。请勿转载和采集!