Subject: SV: simpel fråga.
From: Peter Josefson (peter@abonet.se)
Date: Wed, 22 Mar 2000 15:41:03 +0100
MYCKET ringrostigt svar... har inte sett C på nåt år nu...
Du kan använda read() för file handles eller fread(), fgetc(), getc() (som
skall vara ett makro, inte en funktion) osv för streams. Det har INTE med
funktionen i sig att göra, utan med sättet filen är öppnad på.
Problemet ligger i att filen är ÖPPNAD i radbuffrat läge - det är Linux som
väntar på Enter, inte ditt program. Ditt program har därmed ingen teknisk
möjlighet att se någon input förrän Linux tycker att en rad är slut.
Åtgärd:
1. Jag har som sagt glömt syntax och detaljer, men prova "man open", "man
fopen", "man setbuf", "man setvbuf" så klarnar det nog. setbuf() eller
setvbuf() är nog vad du behöver för en redan öppnad fil (även om jag inte
minns skillnaden mellan dem - har för mig den första är för streams, den
andra för handtag, men jag minns säkert fel).
2. Jag har ett väldigt vagt minne om att stderr som default är obuffrad (den
är iaf det vad gäller output). Ett knep vore således att läsa från den
(vilket jag vet funkar i en del *ixar även om det känns lite långsökt),
alternativt öppna /dev/tty med rätt parametrar.
/Rincewind
PS: Ett hjärnspöke säger mig att jag sett ett "_" framför setbuf/setvbuf,
men jag HOPPAS det minnet kommer från MS C och inte från någon *ix. Kolla.
/DS
> -----Ursprungligt meddelande-----
> Från: Kent Nyberg [mailto:vovin@footek.org]
> Skickat: den 19 mars 2000 10:03
> Till: wlug-prog@wlug.westbo.se
> Ämne: simpel fråga.
>
>
> Det är nog den absolut dummaste fråga ni har fått hit..
> men vilken funktion är det man ska använda för att den ska vänta på en
> knapptryckning från stdin.
> Alltså, inte vänta på return som alla de funktioner jag hitintills har
> testat.
> Hoppas ni förstår.
> Det är inte getc jag är ute efter, alla de simpla
> funktionerna väntar på
> enter. :(
>
>
>
>
>
> --
>
> Kent Nyberg - vovin@footek.org
> 0370 336480
> www.footek.org/~vovin (out of order)
>