Vérification à la volée ou après enter ?
Bonjour,
Une p'tite question : à votre avis, pour analyser une ligne de commande dans un mini-shell, il vaut mieux effectuer l'analyse à la volée avec un getchar ou plutôt attendre que l'utilisateur ait appuyé sur enter (getopt)?
C'est bête comme question, mais je ne sais vraiment pas vers quelle solution m'orienter.
Bon c'est vrai que getopt est puissant, mais si je veux faire de la complémentation il vaut mieux que je travaille en live ?
Merci de vos avis
Re: Vérification à la volée ou après enter ?
Citation:
Envoyé par laurent_ifips
Une p'tite question : à votre avis, pour analyser une ligne de commande dans un mini-shell, il vaut mieux effectuer l'analyse à la volée avec un getchar ou plutôt attendre que l'utilisateur ait appuyé sur enter (getopt)?
C'est bête comme question <...>
Oui, par ce que de toutes façons, on ne peut rien faire (en standard) avant d'avoir tapé enter...
Citation:
Bon c'est vrai que getopt est puissant, mais si je veux faire de la complémentation il vaut mieux que je travaille en live ?
Si tu veux faire de la saisie 'à-la-volée, il faut utiliser des saisies directes avec les extensions qui vont bien (conio, ou read() en desactivant le mode canonique... Ca dépend du système...)
Re: Vérification à la volée ou après enter ?
Citation:
Envoyé par laurent_ifips
Bonjour,
Une p'tite question : à votre avis, pour analyser une ligne de commande dans un mini-shell, il vaut mieux effectuer l'analyse à la volée avec un getchar ou plutôt attendre que l'utilisateur ait appuyé sur enter (getopt)?
C'est bête comme question, mais je ne sais vraiment pas vers quelle solution m'orienter.
Bon c'est vrai que getopt est puissant, mais si je veux faire de la complémentation il vaut mieux que je travaille en live ?
Merci de vos avis
Pour ton minishell, si il doit tourner sur un Unix, pour pouvoir faire des operations comme la completion, la modification de la ligne "en live" il faut que tu desactive la bufferisation de l'entree -> mode non-canonique.
Regardes du cote de ioctl(), et de termios().
Pour desactiver la bufferisation sous Unix :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
#include <sys/termios.h>
#include <sys/ioctl.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
struct termios line_police;
if (ioctl(0, TIOCGETA, &line_police) < 0)
{
perror("Oh oh");
exit(1);
}
line_police.c_lflag &= ~ICANON;
if ((ioctl(0, TIOCSETA, &line_police)) < 0)
{
perror("Oh, oh");
exit(2);
}
/*
** Do what you want here
*/
return (0);
} |
P.S.: penses a la reactiver apres.