News
Challenges
Crackme
ClientSide
Cryptographie
Forensics
Hacking
Logique
Programmation
Stéganographie
Wargame
Tous les challenges
Forum
Tutoriaux
FAQ
Liens utiles
IRC
Newbie Connect
Liens
Partenaires
Réglement
Goodies
L'incubateur
A propos
L'équipe
Hall Of Fame
NewbieContest
Programmation
»
Langages compilés
»
[C] Lire sur l'entrée standard
Username:
1 heure
1 jour
1 semaine
1 mois
Toujours
Password:
Accueil
Aide
Rechercher
Recherche rapide
Recherche avancée
[Fermer]
Identifiez-vous
Inscrivez-vous
Pages: [
1
]
Imprimer
Auteur
Fil de discussion: [C] Lire sur l'entrée standard (Lu 22078 fois)
The-Snake
Profil challenge
Classement : 9252/55007
Membre Junior
Hors ligne
Messages: 78
[C] Lire sur l'entrée standard
«
le:
16 Février 2009 à 18:20:02 »
Bonsoir !
J'ai un petit peu de mal à lire sur l'entrée standard quand on sort de ce que peut contenir un char.
Voici un exemple de code :
Citation
int buffer[2];
int n;
while (n = read(0, buffer, 2))
printf("Touche => %d\n", buffer[0]);
Donnera pour la même touche des résultats différents, en fonction du moment ou cette boucle est placé dans le programme... ou par exemple s'y on y passe plusieurs fois : la première fois les valeurs ne seront pas les même que la deuxième fois (bon, pas toujours, mais souvent).
Le problème, c'est qu'à moins d'utiliser un tableau d'int, je ne peux pas reconnaître les touches telles que haut, bas, alt, ctrl...
Et ça m'embête pas mal, d'autant plus qu'il n'y a pas masses de documentations là-dessus sur Internet (on s'est penché sur le problème avec un camarade et nous sommes revenus bredouille).
Comment, en utilisant read(), pourrais-je alors reconnaître toutes les touches du clavier ?
Journalisée
lemulot
Profil challenge
Classement : 6096/55007
Néophyte
Hors ligne
Messages: 34
{EPITECH.}
Re : [C] Lire sur l'entrée standard
«
#1 le:
16 Février 2009 à 23:32:05 »
Désoler, je peut pas trop t'aider. Je me suis pas encore penchée sur le probleme.
Cependant, je t'oriente sur
cette page
(section Termcaps).
Il y a un prog qui donne la valeur des touches. Il n'utilise pas le read, mais sa devrais etre traduisible
Journalisée
harvey
Profil challenge
Classement : 13/55007
Membre Senior
Hors ligne
Messages: 316
Re : [C] Lire sur l'entrée standard
«
#2 le:
17 Février 2009 à 00:22:00 »
Tu as oublié de nous donner tes identifiants epitech... Je suppose que tu n'as pas le droit de copier le contenu de votre intranet ici, mais le côté "forum corporatiste" est un peu irritant.
Journalisée
L'entropie vient en mangeant.
the lsd
Administrateur
Profil challenge
Classement : 183/55007
Membre Héroïque
Hors ligne
Messages: 3098
poulping for fun & profit
Re : [C] Lire sur l'entrée standard
«
#3 le:
17 Février 2009 à 08:17:47 »
Le problème, si je lis bien, vient de read, d'après ce que tu nous dis. Donc :
Man Read
(ca marche aussi dans un shell pour la plupart des commandes C -> man read)
Si le descripteur de fichier est 0, es tu sur que cela lit l'entrée standard (càd ton clavier)
Enjoy
The lsd
Journalisée
Newbie Contest Staff :
The lsd - Th3_l5D (IRC)
Statut :
Administrateur
Citation :
Cartésien désabusé : je pense, donc je suis, mais je m'en fous !
The-Snake
Profil challenge
Classement : 9252/55007
Membre Junior
Hors ligne
Messages: 78
Re : [C] Lire sur l'entrée standard
«
#4 le:
17 Février 2009 à 10:40:46 »
Citation
Tu as oublié de nous donner tes identifiants epitech... Je suppose que tu n'as pas le droit de copier le contenu de votre intranet ici, mais le côté "forum corporatiste" est un peu irritant.
Effectivement je pense pas qu'on ait le droit de filer le contenu de l'intranet epitech.
De plus je préférerais quand même le faire avec read... le problème c'est que j'ai fait pas mal de boulot comme ça et que comme je n'y arrivais pas ainsi, j'ai du trouver des compromis... et maintenant j'aimerais bien savoir pourquoi je n'y arrivais pas de cette façon.
Citation
Le problème, si je lis bien, vient de read, d'après ce que tu nous dis. Donc :
Man Read (ca marche aussi dans un shell pour la plupart des commandes C -> man read)
Citation
read() lit jusqu'à count octets depuis le descripteur de fichier fd dans le tampon pointé par buf.
Après relecture du main, j'ai testé un read(1, buffer, sizeof(int) * taille du buffer) et effectivement ça semble marcher beaucoup mieux.
C'est donc bien cela ?
«
Dernière édition: 17 Février 2009 à 10:47:46 par The-Snake
»
Journalisée
_o_
Relecteur
Profil challenge
Classement : 43/55007
Membre Héroïque
Hors ligne
Messages: 1258
Re : Re : [C] Lire sur l'entrée standard
«
#5 le:
17 Février 2009 à 12:02:38 »
Citation de: The-Snake le 17 Février 2009 à 10:40:46
De plus je préférerais quand même le faire avec read...
La question est : pourquoi ?
Citation
Après relecture du main, j'ai testé un read(1, buffer, sizeof(int) * taille du buffer) et effectivement ça semble marcher beaucoup mieux.
Plusieurs remarques :
d'une part, d'habitude, sur les Unix, stdin est 0, stdout est 1 et stderr est 2. Côté portabilité, je pense que le plus propre est d'utiliser fileno(stdin).
d'autre part, j'ai un peu de mal à piger pourquoi tu utilises des int pour stocker des char...
enfin, pour terminer : le monde a (beaucoup) évolué depuis ASCII. Et donc, pour plein de raisons, il est vain de croire que l'on peut faire tenir un caractère sur 8 bits. Aaaah, les problèmes d'encodage...
Journalisée
Les épreuves de hack de NC sont trop faciles ? Et pourtant ! Bienvenue dans la vraie vie :
http://thedailywtf.com/Articles/So-You-Hacked-Our-Site!.aspx
The-Snake
Profil challenge
Classement : 9252/55007
Membre Junior
Hors ligne
Messages: 78
Re : [C] Lire sur l'entrée standard
«
#6 le:
24 Février 2009 à 19:26:44 »
Shei? encoding disait un célèbre t-shirt !
Citation
La question est : pourquoi ?
Pourquoi pas ? Ca m'a l'air plus court et plus simple à gérer... je sais pas vraiment quelles sont les alternatives mais ça me fait plaisir de pas avoir à faire intérvenir une autre bibliothèque.
Et l'utilisation de read implique l'utilisation d'un tableau d'int pour stocker des char, pour les caractères qui ne peuvent pas rentrer dans un char.
Il y a des moyens plus simples et plus efficaces ?
Journalisée
the lsd
Administrateur
Profil challenge
Classement : 183/55007
Membre Héroïque
Hors ligne
Messages: 3098
poulping for fun & profit
Re : Re : [C] Lire sur l'entrée standard
«
#7 le:
25 Février 2009 à 08:23:15 »
Citation de: The-Snake le 24 Février 2009 à 19:26:44
Ca m'a l'air plus court et plus simple à gérer... je sais pas vraiment quelles sont les alternatives mais ça me fait plaisir de pas avoir à faire intérvenir une autre bibliothèque.
La question n'est pas de savoir si c'est plus simple pour toi, mais surtout si c'est plus efficace/rapide pour l'utilisateur final. Bien sur, il faut voir aussi en terme de poids du programme final (ne pas inclure trop de librairies non plus). Perso j'opterais quand même pour l'efficacité/rapidité. On est plus à quelques ko près de nos jours.
Quels caractères ne peuvent pas rentrer dans un type char selon toi ?
Enjoy
The lsd
«
Dernière édition: 25 Février 2009 à 11:47:11 par the lsd
»
Journalisée
Newbie Contest Staff :
The lsd - Th3_l5D (IRC)
Statut :
Administrateur
Citation :
Cartésien désabusé : je pense, donc je suis, mais je m'en fous !
The-Snake
Profil challenge
Classement : 9252/55007
Membre Junior
Hors ligne
Messages: 78
Re : [C] Lire sur l'entrée standard
«
#8 le:
25 Février 2009 à 09:59:14 »
Les flêches directionnelles, la tabulation, contrôle, alt, les F1-F12, Echap...
J'ai jamais pu en tirer quoique ce soit avec un tableau de char.
Pour l'utilisateur final, ça ne revient pas à la même chose ?
Journalisée
_o_
Relecteur
Profil challenge
Classement : 43/55007
Membre Héroïque
Hors ligne
Messages: 1258
Re : Re : [C] Lire sur l'entrée standard
«
#9 le:
25 Février 2009 à 10:39:21 »
Citation de: The-Snake le 24 Février 2009 à 19:26:44
Et l'utilisation de read implique l'utilisation d'un tableau d'int pour stocker des char, pour les caractères qui ne peuvent pas rentrer dans un char.
Autant pour moi, je n'avais pas regardé le man avant de répondre.
Citation de: The-Snake le 25 Février 2009 à 09:59:14
Les flêches directionnelles, la tabulation, contrôle, alt, les F1-F12, Echap...
Bon, chez moi, les programmes interactifs, ça n'existe pas (ou alors ce sont des IHMs de plus haut niveau). Cela dit il me semble qu'il y a des librairies toutes faites pour gérer les entrées utilisateurs interactives. Au hasard, j'ai entendu parler de readline. Par contre, je n'ose pas imaginer l'usine à gaz que cela doit être.
Journalisée
Les épreuves de hack de NC sont trop faciles ? Et pourtant ! Bienvenue dans la vraie vie :
http://thedailywtf.com/Articles/So-You-Hacked-Our-Site!.aspx
crocrodile
Profil challenge
Classement : 4595/55007
Néophyte
Hors ligne
Messages: 13
Re : [C] Lire sur l'entrée standard
«
#10 le:
05 Avril 2009 à 10:50:44 »
Pour pouvoir lire l'entrée standard caractère par caractère en obtenant aussi tous les caractères de contrôle, il faut configurer le descripteur de STDIN avec l'ensemble des fonctions TERMIOS. En désactivant le mode canonique (ICANON), l'echo (ECHO) et en paramétrant la taille du buffer d'entrée (VMIN) à 1, tu devrais pouvoir utiliser read() comme tu le souhaite.
Plus d'infos:
http://www.sim07.net/man/francais/man3/cfsetospeed.3.php
Il y a de bons paragraphes sur le mode non-canonique et le mode brut.
Journalisée
Pages: [
1
]
Imprimer
Aller à:
Merci de choisir une destination:
-----------------------------
Général
-----------------------------
=> Proposition de tutoriaux
=> Général
=> Suggestions/Dev. du site
=> Projet en Cours
=> Defouloir
=> Sondage pour le site
=> Bugs
-----------------------------
News
-----------------------------
=> News du site
=> News Hacking/Cracking/Phreaking
=> News Informatique/Hardware/Tuning
-----------------------------
Challenges
-----------------------------
=> Aide Crackme
=> Aide Cryptographie
=> Aide Forensics
=> Aide Hacking
=> Aide Javascript/Java/HTML
=> Aide Logique
=> Aide Programmation
=> Aide Stéganographie
=> Aide Wargame
-----------------------------
Afterwards
-----------------------------
=> Afterwards Crackme
=> Afterwards Cryptographie
=> Afterwards Forensics
=> Afterwards Hacking
=> Afterwards Javascript/Java/HTML
=> Afterwards Logique
=> Afterwards Programmation
=> Afterwards Stéganographie
=> Afterwards Wargame
-----------------------------
Divers
-----------------------------
=> Linux
=> Hacking
=> Cracking
=> Hardware
=> Informatique
-----------------------------
Programmation
-----------------------------
=> Langages compilés
=> Autres langages
=> Langages Web
Chargement...