首頁 > 後端開發 > C++ > 主體

如何在 Linux 中實作非阻塞鍵盤輸入:kbhit() 和 getch() 等效項指南

Susan Sarandon
發布: 2024-10-29 01:11:30
原創
673 人瀏覽過

How to Achieve Non-Blocking Keyboard Input in Linux: A Guide to kbhit() and getch() Equivalents

使用kbhit() 和getch() 等效項在Linux 中存取鍵盤輸入

提供的Windows 程式碼利用特定於平台的函數_kbhit( ) 和_getch() 來監視鍵盤輸入而不中斷程式循環。然而,這些函數在 Linux 系統上不可用,需要替代方法。

POSIX 相容的kbhit() 等效項

如果您的Linux 系統缺少conio.h 標頭支援kbhit(),請考慮利用Morgan Mattews 的實作。此解決方案在任何符合 POSIX 標準的系統上模擬 kbhit() 功能。

解決getchar() 問題

在termios 層級停用緩衝不僅可以解決kbhit()問題還解決了與getchar() 相關的任何問題,如所提供的資源中所示。這種方法可確保立即接收輸入,而無需等待 Enter 按鍵。

與範例程式碼整合

要使提供的範例程式碼適應Linux 系統,請考慮替換_kbhit () 和_getch() 及其符合POSIX 標準的等效項。下面修改後的程式碼示範了這種整合:

<code class="cpp">#include <termios.h>
#include <unistd.h>
#include <iostream>

int main()
{
    // Disable input buffering
    termios oldt, newt;
    tcgetattr(STDIN_FILENO, &oldt);
    newt = oldt;
    newt.c_lflag &= ~(ICANON | ECHO);
    tcsetattr(STDIN_FILENO, TCSANOW, &newt);

    while (true)
    {
        if (kbhit())
        {
            char c = getchar();
            if (c == 'g')
            {
                std::cout << "You pressed G" << std::endl;
            }
        }
        sleep(500);
        std::cout << "Running" << std::endl;
    }

    // Restore input buffering
    tcsetattr(STDIN_FILENO, TCSANOW, &oldt);

    return 0;
}</code>
登入後複製

此修改後的程式碼利用 Mattews 的 kbhit() 實作並停用輸入緩衝來實現與原始 Windows 程式碼類似的功能。

以上是如何在 Linux 中實作非阻塞鍵盤輸入:kbhit() 和 getch() 等效項指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!