• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

GCC Telnet scanf ohne warten

Hallo,

habe eine Telnet Schnittstelle von der Ich Befehle entgegen nehme, nur bei Scanf wartet die ganze App. bis eine Eingabe gemacht wird.
Welche Lösungsansätze gibt es hier damit die App. weiterläuft. Extra nen eigenen Thread dafür zu starten finde ich übertrieben??

cu Carsten.
 
while(1)
{
SomethingToDo();
printf("CMD:\n");
scanf("%c", &cmd);
switch(cmd)
{
'c': ... break;
'd'.... break;
}
}

Stelle mir irgendetwas in der Art vor, nur scanf darf nicht die Hauptschleife anhalten.

cu Carsten.
 
carsto schrieb:
nur scanf darf nicht die Hauptschleife anhalten.
scanf() wartet immer auf die Eingabe, das ist ANSI-C und unabhängig vom Betriebssystem.

Ergibt auch Sinn, schließlich formatiert scanf() die Eingabe auch und was soll es bei keiner Eingabe formatieren?
 
ja schon, will halt nicht warten bis ein Zeichen eingegeben wird, sondern nur kurz Abfragen liegt ein Zeichen an oder nicht.
In Dose gabs da getch für.
 
Und was hindert dich am Aufruf von man getch?
Code:
The getch, wgetch, mvgetch and mvwgetch, routines read a character from the window. In no-delay mode, if no input is waiting, the value ERR is returned. In delay mode, the program waits until the system passes text through to the program. Depending on the setting of cbreak, this is after one character (cbreak mode), or after the first newline (nocbreak mode). In half-delay mode, the program waits until a character is typed or the specified timeout has been reached.
 
mmmhh irgenwie komisch ...
:~> man getch
Kein Manual-Eintrag für getch vorhanden

Finde bei mir keine man-page.
 
A

Anonymous

Gast
Dann probiers mal hier mit
http://www.openbsd.org/cgi-bin/man.cgi?query=getc&apropos=0&sektion=0&manpath=OpenBSD+Current&arch=i386&format=html
das solltest du auch unter man getc finden.

robi
 
naja funzt nur net so richtig:

#include <stdio.h>

int main()
{
char c;
while(1)
{
c = getc(stdin);
printf("I am running ...\n");
}
return(0);
}

DIese Schleife sollte die Var. c füllen wenn die Tastatur betätigt wird, und ansonsten I am running ausgeben, und nicht bei getc stehen bleiben.
getch wie bei Dose kenn der gcc nicht!

cu Carsten.
 
A

Anonymous

Gast
stimmt getc funktioniert da auch nicht, und mit der Bufferung von stdin wird es auch nicht leichter, also mein 1. Tipp suche mal in der LIB von ncurses, man ncurses sollte reichen um dir einen Überblick zu verschaffen. da sollte sowas bestimmt drin sein.

ansonsten mal im Internet suchen, da gibt es immer wieder mal so lustige Versuche so was zu programmieren.

zB.
http://www.cppfrance.com/code.aspx?ID=10611
http://www.issociate.de/board/post/340209/portables_%22Taste_einlesen%22,_nicht_blockierend.html

robi
 
Oben