在 Linux 中,getchar()
函數(shù)用于從標準輸入(通常是鍵盤)讀取一個字符
以下是一個使用 getchar()
和信號處理的示例程序:
#include<stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include<signal.h>
#include <termios.h>
// 定義一個全局變量,用于存儲原始的終端設置
struct termios old_term;
// 信號處理函數(shù)
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);
// 創(chuàng)建新的終端設置,以便進行修改
new_term = old_term;
// 設置新的終端屬性:關(guān)閉回顯,使 getchar() 立即返回
new_term.c_lflag &= ~(ECHO | ICANON);
tcsetattr(STDIN_FILENO, TCSANOW, &new_term);
// 設置信號處理函數(shù)
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;
}
這個程序首先獲取并修改終端設置,以便在按下任意鍵時立即返回。然后,它設置了一個信號處理函數(shù),以便在收到 SIGINT 信號(例如,當用戶按下 Ctrl+C 時)時恢復原始的終端設置并退出程序。最后,它使用 getchar()
讀取一個字符,并在按下任意鍵時打印該字符。