Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara Mencapai Input Papan Kekunci Tidak Menyekat dalam Linux: Panduan untuk kbhit() dan getch() Setara

Cara Mencapai Input Papan Kekunci Tidak Menyekat dalam Linux: Panduan untuk kbhit() dan getch() Setara

Susan Sarandon
Susan Sarandonasal
2024-10-29 01:11:30675semak imbas

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

Mengakses Input Papan Kekunci dalam Linux Menggunakan kbhit() dan getch() Setara

Kod Windows yang disediakan menggunakan fungsi khusus platform _kbhit( ) dan _getch() untuk memantau input papan kekunci tanpa mengganggu gelung program. Walau bagaimanapun, fungsi ini tidak tersedia pada sistem Linux, memerlukan pendekatan alternatif.

Setara kbhit() Mematuhi POSIX

Jika sistem Linux anda tidak mempunyai pengepala conio.h yang menyokong kbhit(), pertimbangkan untuk memanfaatkan pelaksanaan Morgan Mattews. Penyelesaian ini mencontohi kefungsian kbhit() pada mana-mana sistem yang mematuhi POSIX.

Menyelesaikan Isu getchar()

Menyahaktifkan penimbalan pada peringkat termios menyelesaikan bukan sahaja kbhit() isu tetapi juga menangani sebarang kebimbangan yang berkaitan dengan getchar() seperti yang ditunjukkan dalam sumber yang disediakan. Pendekatan ini memastikan input diterima serta-merta tanpa menunggu tekan kekunci Enter.

Integrasi dengan Kod Contoh

Untuk menyesuaikan kod contoh yang diberikan kepada sistem Linux, pertimbangkan untuk menggantikan _kbhit () dan _getch() dengan setara mematuhi POSIX mereka. Kod yang disemak di bawah ini menunjukkan penyepaduan ini:

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

Kod yang diubah suai ini menggunakan pelaksanaan kbhit() Mattews dan menyahaktifkan penimbalan input untuk mencapai kefungsian yang serupa seperti kod Windows asal.

Atas ialah kandungan terperinci Cara Mencapai Input Papan Kekunci Tidak Menyekat dalam Linux: Panduan untuk kbhit() dan getch() Setara. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn