Linux C 程序:使用信号处理函数实现自定义中断功能
Linux C 程序:使用信号处理函数实现自定义中断功能
本文将介绍如何在 Linux C 程序中使用 signal() 函数和 rand() 函数,实现自定义中断功能,例如当用户按下 Ctrl+Z 时显示星号图案,按下 Ctrl+\ 时生成随机数,按下 Ctrl+C 时结束程序运行。
代码示例
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
void signal_handler(int sig)
{
switch(sig)
{
case SIGTSTP: // Ctrl+Z
printf("\n");
for(int i=0; i<5; i++)
{
for(int j=0; j<10; j++)
{
printf("*");
}
printf("\n");
}
printf("\n");
break;
case SIGQUIT: // Ctrl+\
printf("\n");
for(int i=0; i<5; i++)
{
printf("%d ", rand()%100);
}
printf("\n");
break;
case SIGINT: // Ctrl+C
printf("\nProgram terminated.\n");
exit(0);
break;
}
}
int main()
{
signal(SIGTSTP, signal_handler); // 注册Ctrl+Z的信号处理函数
signal(SIGQUIT, signal_handler); // 注册Ctrl+\的信号处理函数
signal(SIGINT, signal_handler); // 注册Ctrl+C的信号处理函数
while(1)
{
printf("Press Ctrl+Z or Ctrl+\ or Ctrl+C.\n");
sleep(1);
}
return 0;
}
运行结果
在终端运行程序后,按下 Ctrl+Z 可以显示如下图形:
**********
**********
**********
**********
**********
按下 Ctrl+\ 可以显示一批随机数,例如:
45 34 67 19 54
按下 Ctrl+C 可以结束程序运行。
代码解析
-
信号处理函数
signal_handler()- 该函数接收一个
sig参数,代表接收到的信号。 - 函数内部使用
switch语句判断信号类型,并执行相应的操作。 SIGTSTP代表Ctrl+Z信号,程序会显示星号图案。SIGQUIT代表Ctrl+\信号,程序会生成 5 个随机数。SIGINT代表Ctrl+C信号,程序会输出 "Program terminated." 信息并退出。
- 该函数接收一个
-
main()函数- 使用
signal()函数将SIGTSTP、SIGQUIT和SIGINT信号分别与signal_handler()函数关联。 - 进入无限循环
while(1),程序会一直等待用户输入。 - 使用
sleep(1)函数让程序每秒钟输出一次提示信息。
- 使用
总结
本文介绍了如何使用 signal() 函数在 Linux C 程序中实现自定义中断功能,方便用户通过不同的按键组合控制程序的行为。该方法可以应用于各种场景,例如调试程序、控制程序运行状态等。
更多信息
原文地址: https://www.cveoy.top/t/topic/orB0 著作权归作者所有。请勿转载和采集!