91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

如何結合Linux信號處理getchar輸入

小樊
83
2024-09-06 21:30:33
欄目: 智能運維

在 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() 讀取一個字符,并在按下任意鍵時打印該字符。

0
沾化县| 石家庄市| 成安县| 巴彦县| 县级市| 上栗县| 阿拉善盟| 盘山县| 右玉县| 桂林市| 土默特右旗| 扎囊县| 阿城市| 江永县| 罗平县| 孙吴县| 嵊州市| 福建省| 德保县| 双牌县| 定安县| 曲麻莱县| 东光县| 宿迁市| 文安县| 尉犁县| 甘孜县| 郑州市| 焦作市| 讷河市| 平乡县| 武穴市| 巴林右旗| 大渡口区| 托克托县| 镇雄县| 五河县| 定结县| 容城县| 驻马店市| 密云县|