Newsgroup: it.comp.lang.c
Titolo: Svuotare il buffer della tastiera

 'The Krazy One'   ::--------
->  "To reign is worth ambition, though in hell."   |  UIN: 21267457  <-
-<  "Better to Reign in Hell Than Serve in Heaven"  | ircnet: krazy98 >-
---** Beware of programmers who carry screwdrivers. **---

Ciao Pietro,
se non ricordo male fflush(stdin).
ciao, Franco.
--
Posted from [194.184.225.66] by way of 
law2-oe1.hotmail.com
 [216.32.180.105]
via Mailgate.ORG Server - 
http://www.mailgate.org

tastiera?
Un metodo semplice e' quello di eseguire tante letture sino a che non
incontri la fine della linea corrente.
Per esempio, se si vuole compiere la lettura del primo carattere di
ogni linea del buffer, non si puo' fare utilizzando :
c = getchar() ;
c = getchar() ;
in quanto il secondo getchar() restituisce almeno '\n'.
Quindi bisogna utilizzare :
c = getchar() ;
while ( getchar() != '\n' ) ;
c = getchar() ;

se non ricordo male fflush(stdin).
No, attenzione : il comportamento di fflush() e' definito solo per gli
stream di output.

 gli stream di output.
  Ho letto qualche giorno fa un post su comp.lang.c nel quale era
contenuta una simpatica analogia: immagina che /stdout/ sia un gabinetto
e fflush(3) una funzione che richiama lo sciacquone... Tireresti mai lo
sciacquone se nel gabinetto ci fosse il contenuto di /stdin/? ;)
	Alla prossima,
		Marco

sciacquone se nel gabinetto ci fosse il contenuto di /stdin/? ;)
A dire il vero, mi dispiacerebbe buttare un panino nel gabinetto ancor
prima di mangiarmelo.
In fondo anch'io sono una macchina che va avanti a
input/elaborazione/output.
Ovviamente ho i miei difetti : a volte durante l'elaborazione mi
appisolo e riconosco che la differenza d'odore tra il mio input e il
mio output e' rilevante ;)

 rilevante ;)
  L'importante e` evitare la il segmentation fault con conseguente core
dump. :)
	Alla prossima,
		Marco

tastiera?
Continui a leggere e butti via.
-- 
ciao, | [Per rispondere togli "toglimi" dal mio indirizzo.]    | Be happy.
Marco | What was you username again? <clickety clickety click> | Be root.
      | Linux: be your own luser!

 'The Krazy One'   ::--------
->  "To reign is worth ambition, though in hell."   |  UIN: 21267457  <-
-<  "Better to Reign in Hell Than Serve in Heaven"  | ircnet: krazy98 >-
---** Life would be easier if I had the source code. **---

Forse potresti provare a resettare direttamente il buffer di tastiera
gestito dal bios  presente in memoria bassa . Pero' non so se funziona
,non ho mai provato .... .
ciao


~~~~~~~~~~~~~~~~~
MAINARDI Gianfranco
Burago di Molgora (MI)
Italia
Email : 
main...@rete039.it
ICQ# number : 31334916
~~~~~~~~~~~~~~~~~

 gestito dal bios  presente in memoria bassa .
Non c'e' nessun buffer gestito dal BIOS.  Il BIOS viene usato solo per
leggere il kernel dal disco durante il boot, poi non fa piu' nulla.
	Mauro

 leggere il kernel dal disco durante il boot, poi non fa piu' nulla.
Forse ti confondi con il loader? Il BIOS non offre dei servizi a basso
livello utilizzati sia dal DOS che dagli applicativi?
EMG
PS. Forse ti riferivi a Unix? In quel caso non ne so niente ma immagino
che il concetto di BIOS (Basic Input Output System) debba essere
analogo.

---** Beware of programmers who carry screwdrivers. **---
io faccio:
fflush(stdin);
su SunOS funziona, perche' no in linux... :-)

 'The Krazy One'   ::--------
->  "To reign is worth ambition, though in hell."   |  UIN: 21267457  <-
-<  "Better to Reign in Hell Than Serve in Heaven"  | ircnet: krazy98 >-
---** Revolutionary: Disk drives go round and round. **---

,non ho mai provato .... .
Non credo che serva a qualcosa, dato che l'input in C e' bufferizzato
a prescindere dal buffer della tastiera...
Piu' che altro se avessimo del codice da poter commentare, sarebbe
meglio ...

su SunOS funziona, perche' no in linux... :-)
Perche' e' sbagliato : fflush() e' definito SOLO per gli stream di
output.
Dalle FAQ :
12.26:	How can I flush pending input so that a user's typeahead isn't
	read at the next prompt?  Will fflush(stdin) work?
A:	fflush() is defined only for output streams.  Since its
	definition of "flush" is to complete the writing of buffered
	characters (not to discard them), discarding unread input   	
        would not be an analogous meaning for fflush on input streams.
	There is no standard way to discard unread characters from a
	stdio input stream, nor would such a way necessarily be
	sufficient, since unread characters can also accumulate in
	other, OS-level input buffers.  You may be able to read and
	discard characters until \n, or use the curses flushinp()
	function, or use some system-specific technique.  

leggere il kernel dal disco durante il boot, poi non fa piu' nulla.
Non e' corretto.
Il sistema operativo viene lanciato dal firmware della macchina.
Le routine del BIOS vengono mappate in memoria per la gestione delle
periferiche.
La gestione della tastiera si basa su interrupt BIOS (09h, 16h,
ecc...) 
Inoltre vengono conservati in due indirizzi di memoria bassa i valori
del puntatore alla testa e alla coda del buffer di tastiera.

 il BIOS neanche per accedere alla tastiera :(
Adesso ho realizzato: il PC ha il BIOS nella ROM ma se installo Linux
questo semplicemente non lo usa, giusto?
EMG

 
Ma chi te l'ha detto???? Il bios e' il cuore del sistema. Tutte le funzioni
del S.O. sono intefacciate al bios. Quando leggi e scrivi da una periferica, il passaggio e' utente -> S.O. -> Bios

 'The Krazy One'   ::--------
->  "To reign is worth ambition, though in hell."   |  UIN: 21267457  <-
-<  "Better to Reign in Hell Than Serve in Heaven"  | ircnet: krazy98 >-
---** Mac error message: Like, dude, something's wrong. **---

del S.O. sono intefacciate al bios. Quando leggi e scrivi da una periferica, il passaggio e' utente -> S.O. -> Bios
In windows. In linux il BIOS sparisce dopo che il kernel e' partito;
serve solo per il suo avvio
--
(o-  T | If Bill Gate$ had a nickel for every time window$ crashed...
//\  U | ... oh, wait, he does...
V_/_ X | email: r.salmaso (at) 
flashnet.it
 | pinguin (at)
linuxfan.com
VDK (C++ GUI lib) 
http://www.guest.net/homepages/mmotta/VDKHome
VDKBuilder (RAD Tool) 
http://www.guest.net/homepages/mmotta/vdkbuilder

 passaggio e' utente -> S.O. -> Bios
Il cuore del sistema e' il kernel. Nessuna funzione del S.O. si interfaccia
al BIOS, e non potrebbe neanche farlo,  visto che il BIOS si basa sulla
modalita' di indirizzamento reale a 16 bit e non funziona in modo protetto.
	Mauro

il BIOS neanche per accedere alla tastiera :(
Il BIOS e' il sistema operativo che gestisce l'input/output.
Prescindendo dal compilatore, a meno di non bypassarlo, accedendo
direttamente alle porte hardware, non puo' essere escluso da tali
operazioni.

serve solo per il suo avvio9
Ma "SPARISCE" in che senso ???
Linux e' un *sistema operativo* che, come tutti i sistemi operativi,
viene avviato dal programma presente in ROM.
Come fa il BIOS a scomparire se deve occuparsi di tutte quelle
funzioni di base per l'input/output, dato che tale e' il suo compito ?

 'The Krazy One'   ::--------
->  "To reign is worth ambition, though in hell."   |  UIN: 21267457  <-
-<  "Better to Reign in Hell Than Serve in Heaven"  | ircnet: krazy98 >-
---** Useless Invention: Candy bars with stannous fluoride added. **---

Nessuna funzione del S.O. si interfaccia al BIOS, e non potrebbe neanche farlo,
Nulla di piu' sbagliato !
La gestione delle periferiche viene implementata grazie al BIOS.
In un computer, l'I/O e' gestito in questo modo :
INPUT  : Utente      -> BIOS -> kernel S.O.
OUTPUT : kernel S.O. -> BIOS -> Utente 

disattivi gli hard disk dal CMOS, Linux li vedra' lo stesso.
E se un domani monto una periferica nuova, con una tecnologia di
accesso diversa da quelle preesistenti, con proprie routine BIOS di
interfaccia, Linux come si comporta ?

 'The Krazy One'   ::--------
->  "To reign is worth ambition, though in hell."   |  UIN: 21267457  <-
-<  "Better to Reign in Hell Than Serve in Heaven"  | ircnet: krazy98 >-
---** Excuse me while I dance a little jig of despair **---

 'The Krazy One'   ::--------
->  "To reign is worth ambition, though in hell."   |  UIN: 21267457  <-
-<  "Better to Reign in Hell Than Serve in Heaven"  | ircnet: krazy98 >-
---** Very funny, Scotty. Now beam down my clothes... **---

 'The Krazy One'   ::--------
->  "To reign is worth ambition, though in hell."   |  UIN: 21267457  <-
-<  "Better to Reign in Hell Than Serve in Heaven"  | ircnet: krazy98 >-
---** "Vote for Perot" - Bumper sticker attached with Velcro **---

 interfaccia, Linux come si comporta ?
Immagino si debba aspettare che qualcuno ne scriva i drivers.
EMG

 wrote:
[ snip ]
AL>Linux e' un *sistema operativo* che, come tutti i sistemi operativi,
AL>viene avviato dal programma presente in ROM.
Esatto.
AL>Come fa il BIOS a scomparire se deve occuparsi di tutte quelle
AL>funzioni di base per l'input/output, dato che tale e' il suo compito ?
Perche' una volta che Linux e' caricato e fatto partire, fornisce anche 
le funzioni di base per l'I/O, il BIOS non e' piu' necessario.
Ciao ciao,
Andrea
-- 
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and 
 the Ugly)."
(by Matt Welsh)

del S.O. sono intefacciate al bios.
Forse quelle del SO che usi tu. Il mio non lo tocca neanche con le
pinze.


Qualunque periferica generalmente e' memory mapped. 
Chi l'ha detto ???

Immagino si debba aspettare che qualcuno ne scriva i drivers.
Esatto, ma i driver sono solo un'interfaccia software, che si appoggia
alle specifiche routine BIOS.

le funzioni di base per l'I/O, il BIOS non e' piu' necessario.
Questo pero' e' quello che appare a chi utilizza il sistema operativo,
nel senso che, magari, si utilizzano funzioni del sistema operativo
per gestire le periferiche (senza bypassare il s.o. per raggiungere il
BIOS), ma il sistema operativo, quando deve compiere un'operazione di
i/o di base, deve per forza di cose affidarsi al BIOS, a meno che il
progettista del s.o. non si e' sbattuto per trovare il modo di
bypassare il BIOS, gestendo le porte hardware, ma la cosa mi sembra
impensabile. 

dei livelli bassi di Linux di intervenire. Crosspost su it.comp.linux.
Strano perche' ?

funzioni di base per l'input/output, dato che tale e' il suo compito ?
Non viene usato


 'The Krazy One'   ::--------
->  "To reign is worth ambition, though in hell."   |  UIN: 21267457  <-
-<  "Better to Reign in Hell Than Serve in Heaven"  | ircnet: krazy98 >-
---** Hors d'oeuvres--a ham sandwich cut into forty pieces. **---

 'The Krazy One'   ::--------
->  "To reign is worth ambition, though in hell."   |  UIN: 21267457  <-
-<  "Better to Reign in Hell Than Serve in Heaven"  | ircnet: krazy98 >-
---** It's as easy as 3.14159265358979323846264338327950... **---

impensabile.
Non vorrei sbagliare, ma mi sembra che il BIOS per le macchine tipo PC abbia
codice non-reentrant, cosa che ne renderebbe difficile l'utilizzo su sistemi
multitasking.
Windows mi sa che lo usa lo stesso (infatti si parlava di SO ;-)), ma OS/2
credo di no. Linux non lo so.
Marco

alle specifiche routine BIOS.
Non e` sempre vero, il BIOS e` un software come un altro e i driver possono
decidere se appoggiarsi ad esso o meno.
_mirko_
--
Knowledge is power.
"ciucciati.il.calzino" is antispam.

impensabile. 
Eppure l'attuale kernel di Linux, per quanto riguarda la gestione della tastiera
(AT e PS/2), fa proprio come dice Andrea Foco (ovvero niente BIOS solo porte
60h,64h e poco piu`).


OUTPUT : kernel S.O. -> BIOS -> Utente 
Nulla di piu` approssimativo (chi la fa l'aspetti ;) 
Schema a blocchi della gestione della tastiera AT o PS/2 (DOS).
U. | Tastiera | Intel 8049c | IRQ 1 (Int9)| Buffer | funz. BIOS (| funz. DOS)
   |    -------  hardware --^             |  BIOS -^            (|    DOS   )
Linux usa l'hardware gestendolo a basso livello.


 operazione
Esatto, tranne forse qualche dialogo con l'APM, ma di questo non sono
sicuro.
Ciao
-- 
Simone Piccardi
Microsoft is NOT the answer. Microsoft is the Question.
The answer is: "NO!"

Dopo che e' partito
Dopo che e' partito che cosa ???

decidere se appoggiarsi ad esso o meno.
Il BIOS non e' affatto un software come un altro, e' il software di
base per la gestione delle periferiche.
I driver possono decidere se appoggiarsi o meno ad esso nel senso che
possono bypassarlo per accedere direttamente alle porte hardware.

60h,64h e poco piu`).
Difatti, nei miei post precedenti ho contemplato questa possibilita'.

   |    -------  hardware --^             |  BIOS -^            (|    DOS   )
E secondo te questo schema non equivale a 
INPUT  : Utente      -> BIOS -> kernel S.O.  ???
Il fatto che Linux agisca diversamente, e' un altro discorso.
Se rileggi il thread dei messaggi ai quali stai rispondendo, ti e'
facile capire che non si sta parlando di Linux nello specifico, ma di
un sistema operativo generico.

 impensabile.
Invece penso proprio che sia cosě. In fin dei conti il BIOS č sempre
stato accusato di lentezza e inefficienza e quindi uno dei modi per
scrivere un sistema operativo migliore sarebbe quello di riscrivere
anche i drivers di basso livello. Comunque le mie sono solo ipotesi dato
che non so niente di Unix/Linux.
EMG

 alle specifiche routine BIOS.
Parlavo di drivers a basso livello. Quindi quelli che si interfacciano
direttamente all'hardware attraverso le porte o gli indirizzi mappati.
Mi sembra che Unix/Lunix offra un supporto diretto per questo tipo di
estensioni, ma potrei sbagliare.
EMG

 kernel.
Secondo me l'impossibilità non dipende da questo ma dai servizi di
protezione della memoria offerti dal sistema operativo e/o dal
processore. Sbaglio?
EMG

 operazione.
Non e' sempre vero:
Potrei sbagliarmi, ma lo utilizza per esempio per gestire gli interrupts del PCI.
vedi /usr/src/linux/arch/i386/kernel/bios.c
-- 
 +-------------------------------------------+
 |        Enrico Bodo  -   PhD student       |
 |      University of Rome "La Sapienza"     |
 |          Department of Chemistry          |
 +-------------------------------------------+

Poi, se il s.o. bypassa il BIOS, e' un altro discorso ancora.
E' questo che Linux fa


un obbligo che debba usare il BIOS
Hai appena affermato che il BIOS esiste solo sui PC e questo e' gia'
di per se' discutibile ed affermi anche che esistono "le altre
macchine su cui gira Linux".
Non so se sbaglio io, o sei tu a scrivere in modo poco chiaro...

 'The Krazy One'   ::--------
->  "To reign is worth ambition, though in hell."   |  UIN: 21267457  <-
-<  "Better to Reign in Hell Than Serve in Heaven"  | ircnet: krazy98 >-
---** I haven't lost my mind -- it's backed up on tape somewhere. **---

 wrote:
[ snip ]
AL>[...] a meno che il progettista del s.o. non si e' sbattuto per 
AL>trovare il modo di bypassare il BIOS, gestendo le porte hardware, 
AL>ma la cosa mi sembra impensabile. 
E perche' mai ?


sicuro.
Questo si, ma si tratta di "estensioni" del BIOS a 32 bit.
La stessa cosa vale per il framebuffer, li' qualche chiamata
strana per settare la scheda di rete la fa.
Tecnicamente pero' le vecchie chiamate al bios che si usavano in DOS,
tipo l'int 10 del video, non vengono usate e NON sono usabili in Linux.

> OUTPUT : kernel S.O. -> BIOS -> Utente 
Se intendi che il BIOS gestisce le periferiche
questo e' vero solo per il DOS.
Linux ed altri OS a 32 bit non usano il BIOS,
anche perche' il bios e' scritto a 16bit in modalita' reale
mentre Linux e gli altri usano la modalita' protetta.
Quando un utente preme un tasto e il controller della tastiera
ad inviare alla CPU un segnale di interruzzione, ogni volta
che succede questo la CPU esegue la relativa funzione del sistema
operativo senza passare per il BIOS.
Spero sia questo cio' che volevi sapere.
Ciao, AGX

Si, infatti. Mi riferivo al fatto che forse non e' corretto dire che il
kernel non usa in assoluto niente del bios. 
Per il resto mi pare ovvio che un SO serio l'hardware se lo gestisce per
i fatti suoi.


Ciao, AGX
Saluti
    Mardy
--
Per rispondere, togliere NVN dal mio indirizzo.
Periodo di esami: non disturbare, parlare sottovoce!

te il boot loader (che carica il kernel) a chi si appoggia?
Rileggi la mia risposta circa lo scrivere in modo corretto in
italiano.
Io so piu' che bene come funziona la sequenza di boot di un
elaboratore.

Se rileggi il thread dei messaggi ai quali stai rispondendo
[...]
Oh Andrea... diacciati bis :>
Anche perche` sei tu che hai nominato linux, il mio schema vale per tutti i s.o.
_mirko_
PS: Con ogni probabilita` sono io che sono strano, ma le differenze tra il mio
schema e il tuo continuo a vederle e credo che niente potra` farmi cambiare
idea.

Anche perche` sei tu che hai nominato linux, il mio schema vale per tutti i s.o.
"Amico", queste parole :
"Linux usa l'hardware gestendolo a basso livello." sono tue !...

operazioni di accesso e scrittura dei dati."
Visto che dobbiamo continuare a rinfacciare quali porzioni dei
messaggi sono miei e sono tuoi, ti ricordo che Unix e Linux girano su
macchine basate sul BIOS, per il semplice motivo che esso e' parte
integrante del sistema di elaborazione.
Se poi non lo usano e' un altro discorso.

On Tue, 15 Jun 1999 14:36:53 GMT, 
mai...@tin.ciucciati.il.calzino.it

"Amico", le parole
"In tutti i s.o. che sfruttano massicciamente le periferiche (v. anche
Unix/Linux) il BIOS offre il supporto a livello elementare per le
operazioni di accesso e scrittura dei dati."
sono tue (e rinnovo il "chi la fa l'aspetti").
