OVH Cloud OVH Cloud

[prog C] lecture du buffer stdin

3 réponses
Avatar
Sacha MILLET
Bonjour à tous!

je voudrais pouvoir lire un ligne de longueur quelconque au clavier (stdin,
donc) sous unix solaris et stocker le résultat dans une liste chaînée. (je
pense que le résultat sera sensiblement le même sous linux).
J'aimerais donc avoir un truc du style:

tantque(quelque_chose_à_lire_dans_le_buffer==TRUE) {
ajouter(caractère);
}

pour la gestion des listes chaînées, pas de problème, c pas compliqué! par
contre, ce que j'aimerais, c'est que quelqu'un me dise comment savoir s'il
reste quelque chose à lire dans le buffer, et , si oui, quel est le
caractère (même si on ne me donne pas la solution, au moins me donner une
piste de recherche!)
j'avais orienté mes recherches sur fread(...), mais, à priori, ça marche pas
top, ou alors, je l'ai mal utilisé!!!

merci d'avance pour votre aide!

3 réponses

Avatar
Laurent Wacrenier
Sacha MILLET écrit:
je voudrais pouvoir lire un ligne de longueur quelconque au clavier (stdin,
donc) sous unix solaris et stocker le résultat dans une liste chaînée. (je
pense que le résultat sera sensiblement le même sous linux).
J'aimerais donc avoir un truc du style:

tantque(quelque_chose_à_lire_dans_le_buffer==TRUE) {
ajouter(caractère);
}


Le clavier n'est pas stdin.

La lecture du clavier est spécifique à l'Unix cible et la fonction ne
renvera probablement que des numéro de touche. Accesoirement, il y a
toujours quelque chose à lire sur le clavier, tant que personne ne le
débranche.

Si vous voulez lire le terminal, c'est autre chose.

L'entrée standard c'est encore autre chose.

En général, pour lire une ligne, il faut lire caractère par caractère
jusqu'à rencontrer une fin de ligne ou une erreur.

Et je ne vois pas le rapport avec les listes chaînées.

Avatar
Bertrand Masius
Le Fri, 21 Nov 2003 19:42:03 +0100, Sacha MILLET a écrit :

Bonjour à tous!

je voudrais pouvoir lire un ligne de longueur quelconque au clavier
(stdin, donc) sous unix solaris et stocker le résultat dans une liste
chaînée. (je pense que le résultat sera sensiblement le même sous
linux). J'aimerais donc avoir un truc du style:

tantque(quelque_chose_à_lire_dans_le_buffer==TRUE) {
ajouter(caractère);
}




la fonction select() dans une boucle pourrait faire ça, avec un Flag à 0
pour stdin

Avatar
Grin Thomas
tu veux pas qqch du genre :

while(read(STDIN_FILENO,*buf,32)==0);



--
Thomas
http://www.cerbermail.com/?vpJmhyWcCC