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 -
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
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
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.
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.
Merci pour votre aide
Si on utilise 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 . 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 à qu'à , et là utiliser sera surement plus rapide.
moi je travaille dans linux et je développe à l'aide de 'gedit'