Read,fread et getchar

Résolu
chaimae97 Messages postés 39 Date d'inscription   Statut Membre Dernière intervention   -  
chaimae97 Messages postés 39 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

SVP, je sais que si par exemple j'ai entré une chaîne de caractère et j'ai utilisé getchar() pour la récupérer, et après l'afficher, le premier lettre va être affiché et les autres vont être dans le buffer clavier, et pour read et fread ? ==>
Dans cet exemple :
char c[1]; char c;
i=fread(c,1,1,stdin) ; i=read(0,&c,1);
ces deux fonctions sont conçus pour lire juste un seul caractère, et si j'ai entré une chaîne de caractère, est-ce-qu'il va passer comme pour getchar : le premier va être afficher et les autres dans le buffer clavier?
Même si on dit que la fonction read est unbuffered ?
Merci d'avance

1 réponse

Dalfab Messages postés 706 Date d'inscription   Statut Membre Dernière intervention   101
 
Bonjour,
Quand une touche est appuyée, le driver transmet le caractère à la console qui va le conserver en attendant qu'une application l'a lui demande. La console doit impérativement disposer d'un buffer pour gérer cela.
Du côté de l'application on peut utiliser read() qui dialoguera directement avec ce buffer pour y lire un caractère après l'autre (ce qui nécessite de nombreux échanges entre les applications). L'application peut utiliser un système bufferisé comme fread() getchar() scanf() fgetc(), lors des échanges avec la console il peut alors y avoir plus de caractères transmis qu'attendus, ils sont conservés du côté de l'application et une lecture ultérieure n'aura pas à demander à la console.

Dans tous les cas il y un buffer minimum, celui de la console. Sinon il y a deux buffers un du côté de l'application, l'autre du côté de la console.
0
Chaimae97
 
Merciii beaucoup pour ces informations importantes !! J'ai une autre question svp si ça ne vous dérange pas :) si on transmet la même quantité de caractères avec getchar et fread et on mesure le temps de ces deux programmes, on trouve que le programme qui a utilisé getchar est plus rapide que du fread. Pourquoi ?
Merci pour votre aide
0
Dalfab Messages postés 706 Date d'inscription   Statut Membre Dernière intervention   101
 
Cela dépends des cas.
Si on utilise
fread()
pour lire un seul caractère, il perd du temps à interpréter ses paramètres supplémentaires et devrait être légèrement plus lent que
getchar()
. Mais je suis très étonné que l'écart soit visible. Les 2 codes sont-ils en mode release?
Si par contre on veut parfois lire des séquences de plusieurs caractères, il y aura plus d'appel à
getchar()
qu'à
fread()
, et là utiliser
fread()
sera surement plus rapide.
0
chaimae97 Messages postés 39 Date d'inscription   Statut Membre Dernière intervention  
 
aaah bon c'est comme çà !! Merciii beaucoup
moi je travaille dans linux et je développe à l'aide de 'gedit'
0