Ich habe einen sehr einfachen TCP-Server in C geschrieben. Er läuft unendlich lange und wartet auf Verbindungen. Unter Windows verwende ich select
um zu prüfen, ob der Socket aktiv ist, und wenn das nicht der Fall ist, habe ich den folgenden Code, der es mir ermöglicht, das Programm durch Drücken von 'q' auf der Tastatur zu beenden:
if( kbhit() ) {
char c = getch();
if( c == 'q' ) break;
}
Dies funktioniert nicht unter Unix, da kbhit
gibt es nicht und getch
funktioniert anders. Ich habe einige Beispielcode die die tcsetattr
um die Terminaleinstellungen zu ändern und eine zeichenweise Eingabe zu ermöglichen. Nach dem Aufruf der init-Funktion öffne ich /dev/stdin (mit O_NONBLOCK
) und ein Zeichen lesen, aber read( f, &c, 1 )
blockiert, bis eine Figur getroffen wird.
Ich könnte wohl einen separaten Thread eröffnen und es auf unbestimmte Zeit warten und dann den ersten Thread signalisieren, wenn der Benutzer "q" drückt, aber das scheint ein wenig schwerfällig zu sein. Sicherlich gibt es einen einfacheren Weg?