Archive

Posts Tagged ‘kbhit’

Pengecekan Keyboard Stroke di C UNIX (2)

November 7, 2008 azer89 2 comments

Wew…sebelumnya pengecekan keyboard stroke yang pake kbhit itu ada kelemahannya, yaitu……resposinya jelek, kbhit cuman ngecek keyboard tersebut tidak idle klo kita ketikkan suatu string ke terminal dan kita tekan ENTER. Nah, kalau kita cuman mencet2 kibor dan gak tekan enter…ya kbhit tadi menganggap kita idle…
Nah, disini ternyata, lagi-lagi ada cara yang lebih seru dan lebih keren, kita cek TTY-nya :

static int long_idle_time;  // ini variabel global

void check_idle()
{
    struct stat stbuf;
    stat(tty, &stbuf);
    char out[100];;
    char time_now[100];
    time_t now,*mod_time;
    memset( out, '', sizeof( time_now) );
    now = time( NULL );
    mod_time = &stbuf.st_mtime;
    if(last_mod_time!=*mod_time)
    {
        last_mod_time=*mod_time;
        long_idle_time=0;
    }
    else long_idle_time++;
    char output[100];
    sprintf(output,"%s has been idle for %d second",tty,long_idle_time);
    syslog(LOG_INFO, output);
}

nah,kita bisa dapat berapa lama user sedang idle lewat variabel long_idle_time

Pengecekan Keyboard Stroke di C UNIX

November 6, 2008 azer89 Leave a comment

Kadangkala kita perlu melakukan pengecekan apakah ada penekanan tombol di keboard apa enggak, kalau keboard lagi gak ditekan, eksekusi perintah A, kalau keyboard sedang gak ditekan, eksekusi perintah B. Nah, gimana seh caranya? kebetulan saya habis diajari teman saya :

int kbhit()
{
    struct termios oldt, newt;
    int ch;
    int oldf;
    tcgetattr(STDIN_FILENO, &oldt);
    newt = oldt;
    newt.c_lflag &= ~(ICANON | ECHO);
    tcsetattr(STDIN_FILENO, TCSANOW, &newt);
    oldf = fcntl(STDIN_FILENO, F_GETFL, 0);
    fcntl(STDIN_FILENO, F_SETFL, oldf | O_NONBLOCK);
    ch=EOF;
    ch = getchar();
    tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
    fcntl(STDIN_FILENO, F_SETFL, oldf);
    if(ch != EOF)
    {
        ch=EOF;
        ungetc(ch, stdin);
        return 1;
    }

    return 0;
}

Jangan lupa kalau potongan program diatas pake header termios.h

Categories: C/C++, Programming Tags: , ,