Hallo,

das wird so nicht funktionieren. Dein getchar fragt nur ab, ob eine Taste gedrückt wurde. Bei Sondertasten wie SHIFT und Co. ist es auch wichtig zu wissen, wann diese wieder losgelassen wurden. Die linke SHIFT-Taste hat den Code 42 und die rechte 54.

Mein GCC kompiliert Deinen Code nicht. Da fehlen einige Libs, true sagt ihm nichts und bool kennt er als Typ nicht.

Bei mir wird '/dev/input/event0' als Eingabe angegeben. Der Thread tastatur liest ja ständig die Tastatur ein. Evtl. geht das unter g++ auch so. Mal testen.....
...
...
Ja, geht.
Folgender Code lässt sich mit g++ compilieren:
Code:
// Compile with: g++ -o /var/scripte/tastaturtest1 /var/scripte/tastaturtest1.c  -L/usr/local/lib -lpthread
//nice -1 /var/scripte/tastaturtest1 < /dev/input/event0 &

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <stdint.h>
#include <sys/sysinfo.h>
#include <time.h>
#include <linux/input.h>
#include <pthread.h>

int ziffer=0;
int beenden=2;
int zeit=0;
int shiftl=0;
int shiftr=0;
int strgl=0;
int strgr=0;
int capsl=0;


unsigned char runterfahren(){
    system("halt");
}

unsigned char zahlentaste()
{
    printf("Zahlentaste: %d\n", ziffer);
}

unsigned char tnull()
{
    ziffer=0;
    zahlentaste();
}

unsigned char teins()
{
    ziffer=1;
    zahlentaste();
    
}

unsigned char tzwei()
{
    ziffer=2;
    zahlentaste();
    
}
unsigned char tdrei()
{
    ziffer=3;
    zahlentaste();
    
}
unsigned char tvier()
{
    ziffer=4;
    zahlentaste();
    
}
unsigned char tfuenf()
{
    ziffer=5;
    zahlentaste();
    
}
unsigned char tsechs()
{
    ziffer=6;
    zahlentaste();
    
}
unsigned char tsieben()
{
    ziffer=7;
    zahlentaste();
    
}
unsigned char tacht()
{
    ziffer=8;
    zahlentaste();
    
}
unsigned char tneun()
{
    ziffer=9;
    zahlentaste();
    
}
unsigned char tdel()
{
    printf("Delete\n");
}

unsigned char tnum()
{
printf("Numlock\n");    
}

unsigned char tenter()
{    printf("Enter\n");
    
}
unsigned char tplus()
{
printf("Plus\n");    
}
unsigned char tminus()
{
printf("Minus\n");
}
unsigned char tmal()
{
printf("Mal\n");    
}

unsigned char tgeteilt()
{
    printf("Geteilt\n");    
}

unsigned char tbs()
{
    printf("Backspace\n");
}

unsigned char tq()
{
    beenden=1;
}

unsigned char status()
{
    printf("SHIFTL: %d, SHIFTR: %d, STRGL: %d, STRGR: %d\n",shiftl,shiftr,strgl,strgr);
}

unsigned char tf1()
{
    if(shiftl>=1 || shiftr>=1){
        printf("SHIFT + F1\n");
    }else{
        printf("F1\n");
    }
}

void* tastatur(void *name)
{
    struct input_event event;
    while ((read(0, &event, sizeof(event)) > 0) && (beenden==2) ) {
        if (event.type != EV_KEY) continue;
//        if (event.value != EV_KEY) continue; //Nur Tastendrücke erkennen, kein Loslassen. 0=losgelassen, 1=gedrückt, 2=Wiederholung(lang gedrückt)
    printf("Typ: %d; Wert: %d; Code: %d\n",event.type,event.value,event.code);

        switch (event.code) {
            case 42: shiftl=event.value; break;
            case 54: shiftr=event.value; break;
            case 29: strgl=event.value; break;
            case 97: strgr=event.value; break;
            case 16: tq(); break; //q
            case 82: tnull(); break; //0
            case 79: teins(); break; //1
            case 80: tzwei(); break; //2
            case 81: tdrei(); break; //3
            case 75: tvier(); break; //4
            case 76: tfuenf(); break; //5
            case 77: tsechs(); break; //6
            case 71: tsieben(); break; //7
            case 72: tacht(); break; //8
            case 73: tneun(); break; //9
            case 83: tdel(); break; //DEL
            case 96: tenter(); break; //ENTER
            case 78: tplus(); break; //+
            case 74: tminus(); break; //-
            case 55: tmal(); break; //*
            case 98: tgeteilt(); break; ///
            case 14: tbs(); break; //Backspace
            case 69: tnum(); break; //NumLock
            case 59: tf1(); break; //F1
            case 31: status(); break; //s
        }
    }
    beenden=0;
    pthread_exit((void *) 0);
}

int main()
{
    pthread_t t1;
    struct  sched_param  param;
    pthread_create(&t1, NULL, tastatur, NULL);     // low priority: keyboard monitoring (stop program)
    param.sched_priority = 20;
    pthread_setschedparam(t1, SCHED_RR, &param);
    
/*    if(pthread_create(&t1, NULL, (void *)&tastatur, (void *)"Tastatur") != 0)
    {
      fprintf(stderr, "Fehler bei Tastatur......\n");
      exit(0);
    }  */
    
    while (beenden > 0)
        {     sleep(1);
            zeit++;
            if (zeit==30)
            {
                zeit=0;
                printf("Wieder 30 Sekunden um.\n");
            }
    } 
    usleep(50);
    printf("***********Ende************\n");
    return 0;
}
Vorgehensweise zum Testen wie oben.