如何结合Linux信号处理getchar输入

avatar
作者
猴君
阅读量:0

在 Linux 中,getchar() 函数用于从标准输入(通常是键盘)读取一个字符

以下是一个使用 getchar() 和信号处理的示例程序:

#include<stdio.h> #include <stdlib.h> #include <unistd.h> #include<signal.h> #include <termios.h>  // 定义一个全局变量,用于存储原始的终端设置 struct termios old_term;  // 信号处理函数 void handle_signal(int signal) {     // 恢复原始的终端设置     tcsetattr(STDIN_FILENO, TCSANOW, &old_term);     exit(0); }  int main() {     struct sigaction sa;     struct termios new_term;     int c;      // 获取当前的终端设置     tcgetattr(STDIN_FILENO, &old_term);     // 创建新的终端设置,以便进行修改     new_term = old_term;      // 设置新的终端属性:关闭回显,使 getchar() 立即返回     new_term.c_lflag &= ~(ECHO | ICANON);     tcsetattr(STDIN_FILENO, TCSANOW, &new_term);      // 设置信号处理函数     sa.sa_handler = handle_signal;     sa.sa_flags = 0;     sigemptyset(&sa.sa_mask);     sigaction(SIGINT, &sa, NULL);      printf("Press any key to continue...\n");      // 使用 getchar() 读取字符     c = getchar();      // 恢复原始的终端设置     tcsetattr(STDIN_FILENO, TCSANOW, &old_term);      printf("You pressed: %c\n", c);      return 0; } 

这个程序首先获取并修改终端设置,以便在按下任意键时立即返回。然后,它设置了一个信号处理函数,以便在收到 SIGINT 信号(例如,当用户按下 Ctrl+C 时)时恢复原始的终端设置并退出程序。最后,它使用 getchar() 读取一个字符,并在按下任意键时打印该字符。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!