Pendant zu getch() und kbhit() im unix bereich???



  • Hi,

    ich suche eine entsprechenden Funktion die wie _getch() (windows) einzelne Zeichen von der Tastatur einließt ohne das man mit Enter die eingabe beenden muß. Da es anscheinend keine solche ANSI - Funktion gibt frag ich hier ob es unter Unix sone funktion speziell gibt 🙂

    Benngun

    [edit]Titel erweitert um den FAQ Eintrag schneller auffindbar zu machen (Original: "Pendant zu _getch() im unix bereich???")[/edit]



  • #include <termios.h>
    
    int getch() {
        static int ch = -1, fd = 0;
        struct termios neu, alt;
        fd = fileno(stdin);
        tcgetattr(fd, &alt);
        neu = alt;
        neu.c_lflag &= ~(ICANON|ECHO);
        tcsetattr(fd, TCSANOW, &neu);
        ch = getchar();
        tcsetattr(fd, TCSANOW, &alt);
        return ch;
    }
    

    [edit by kingruedi]Bug fixed[/edit]



  • ... und weil's so schön ist hier noch kbhit()

    #include <termios.h>
    
    int kbhit(void) {
            struct termios term, oterm;
            int fd = 0;
            int c = 0;
            tcgetattr(fd, &oterm);
            memcpy(&term, &oterm, sizeof(term));
            term.c_lflag = term.c_lflag & (!ICANON);
            term.c_cc[VMIN] = 0;
            term.c_cc[VTIME] = 1;
            tcsetattr(fd, TCSANOW, &term);
            c = getchar();
            tcsetattr(fd, TCSANOW, &oterm);
            if (c != -1)
            ungetc(c, stdin);
            return ((c != -1) ? 1 : 0);
    }
    


  • ansonsten wird man vielleicht auch mit den ncurses oder der uconio glücklich


Anmelden zum Antworten