• 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

carsto

Hacker
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.
 
OP
C

carsto

Hacker
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.
 

panamajo

Guru
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?
 
OP
C

carsto

Hacker
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.
 

panamajo

Guru
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.
 
OP
C

carsto

Hacker
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
 
OP
C

carsto

Hacker
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