Kikou touti li mondi,
Je fais des essais de programmation sous Linux (je découvre à peine l'API système). Je voudrais lire au clavier, ou du moins sur le périphérique d'entrées standard.
Je fais un syscall pour la fonction de lecture, en donnant le handle °1 (entrée standard). Le problème est qu'il y avoir quelque chose qui fait parasite entre la console et l'application (edline je crois) qui fait que quand le programme s'execute, je suis en mode édition de ligne (pourtant l'historique du shell par exemple, ne devrait concerner que le shell, ça me semblerait plus logique), et je dois taper sur <entrée> pour que le programme puisse lire le moindre caractère entré au clavier. Après la sortie du programme, les caractères restants non-lus sur la ligne qui étaient en cours d'édition, sont envoyés au shell (ce qui m'ennuie fortement).
J'ai pensé résoudre le problème en ouvrant le console (/dev/console), pour y faire une lecture (plutôt que de lire sur le handle 1).
Mais le problème, et je ne comprends pas pourquoi, c'est que ça me renvoie toujours 0 (la valeur zéro). Il n'y a pourtant aucun renvoie d'erreur à l'ouverture de /dev/console.
En fait, il me faudrait un accès en lecture qui courcircuite les parasites intermédiaires (j'insiste, l'historique du shell n'a rien à faire ailleur que dans le shell lui-même), et qu'il n'y ai pas de bufferisation de l'entrée en mode ligne (le shell n'a pas à recevoir les caractère entrée au clavier lors de l'execution du programme après que celui-ci se termine).
Quelqu'un(e) connais t-il/elle les base de l'accès au clavier (ou stdin) sous linux ? J'ai recherché en vain sur google.. car bien que le problème soit surement traité quelque part, google me renvoie toujours des pages sur tout et n'importe quoi (bench d'installations linux, clavier multimédia sous linux, ewa, ewa, ewa).
NB. Je fais des teste de programmation en assembleur (l'assembleur pour raisons persos), en passant directement par les syscall (parce que je n'ai pas besoin qu'un programme qui dit coucou-tout-le-monde pèse 150 Téra bytes).
Faut-il passer par les IOCTL ? (je ne les connais pas)
P.S. Si la question vous semble peu claire ou mal formulée, n'hésitez pas à m'en faire part
Partager