Read,fread et getchar

Résolu/Fermé
chaimae97 Messages postés 39 Date d'inscription jeudi 16 novembre 2017 Statut Membre Dernière intervention 13 mars 2019 - 6 avril 2018 à 23:18
chaimae97 Messages postés 39 Date d'inscription jeudi 16 novembre 2017 Statut Membre Dernière intervention 13 mars 2019 - 22 avril 2018 à 16:40
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 dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
8 avril 2018 à 12:40
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
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 dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
8 avril 2018 à 16:11
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 jeudi 16 novembre 2017 Statut Membre Dernière intervention 13 mars 2019
22 avril 2018 à 16:40
aaah bon c'est comme çà !! Merciii beaucoup
moi je travaille dans linux et je développe à l'aide de 'gedit'
0