环境下的终端实现。

代码如下:

#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.

解释一下代码:

  1. 定义了一个信号处理函数 sigint_handler,根据不同的信号类型执行不同的操作。
  2. main 函数中,使用 signal 函数将三种信号分别与 sigint_handler 函数关联起来。
  3. 进入一个无限循环,等待信号的到来。
  4. 当信号到来时,会自动调用对应的信号处理函数来处理
程序的功能是程序运行后进入无限循环当用户按下中断键Ctrl+Z时程序的自定义信号处理函数输出一幅图形当用户按下中断键Ctrl+时产生一批随机数当用户按下中断键Ctrl+C时结束程序运行。运行结果如图所示:利用ubunt linux

原文地址: https://www.cveoy.top/t/topic/fTOg 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录