quitter programme avec control D [C] - Programmation
Marsh Posté le 20-05-2001 à 15:44:19
Je suis desole je n'aie pas d'idee mais la reponse m'interesse.
JE ne sais meme pas comment controle q'une touche a ete pressé.
Sans utiliser getch()!!
@+
Marsh Posté le 20-05-2001 à 15:48:03
Le seul moyen qui me vient à l'esprit, c'est de faire un boucle qui lit les entrées au clavier jusqu'à rencontrer 'eof'
Marsh Posté le 20-05-2001 à 16:50:07
ReplyMarsh Posté le 20-05-2001 à 18:26:08
fait ca avec un signal, ca devrait marcher (man sigaction)
Marsh Posté le 20-05-2001 à 21:26:35
Oui, Il faut que tu trappes le signal. Ca doit etre un SIGINT.
C'est pas tres dur a programmer, une demi page de code il me semble.
A+,
Marsh Posté le 20-05-2001 à 22:17:54
va chercher de l'aide sur la fonction
int bioskey(int c);
tu peux recuperer la valeur hexa de la touche selectionnée
Marsh Posté le 21-05-2001 à 00:29:11
C'est absolument avec Ctrl-D que tu dois quitter ton programme?
Si oui, alors faut effectivement que tu scannes sur stdin ce qui est envoye a ton programme.
Sinon, si ca peut etre un Ctrl-C ou un Ctrl-Z, alors c'est beaucoup plus simple: ca va generer un signal et tu interceptera ca par programme:
vas voir ici par exemple: http://users.actcom.co.il/~choo/lu [...] mming.html
Ctrl-D c'est un evenement console et shell (EOF) mais ca se traduit pas en signal systeme a priori.
Et pour l'intercepter dans un programme, c'est un peu plus complexe, car il faut que tu geres d'une par ton programme, et d'autre part, le poll sur stdin.
A+,
Marsh Posté le 21-05-2001 à 09:37:49
Bon, admettons que tu récupères ce qui est saisi par la variable bidule, ça donnerait ceci selon moi :
main()
{
int bidule = 0;
while ((bidule = getchar()) != EOF)
{
tes traitements;
}
}
Tant que tu n'utilise pas la combinaison de touches Ctrl+D, ton programme fait ce qu'il a à faire. Dès lors que tu fais Ctrl+D, hop, le programme a rencontré EOF, il termine
Marsh Posté le 21-05-2001 à 09:39:15
Et je crois qu'il peut y avoir encore + simple :
while (! (getchar() = EOF))
[edit]--Message édité par Aricoh--[/edit]
Marsh Posté le 21-05-2001 à 11:06:06
Ca marche seulement si ses traitements sont brefs.
Sinon ca marche pas cette methode.
A+,
Marsh Posté le 21-05-2001 à 11:19:35
gilou a écrit a écrit : Ca marche seulement si ses traitements sont brefs. Sinon ca marche pas cette methode. A+, |
Qu'entend-tu par traitement bref ?
Je me souviens avoir fait un programme d'environ 300 lignes où l'on quittait par Ctrl+D ou par un numéro spécifique, y avait des appels de fonctions et autres amuseries et ça ne posait pas de problème, c'est mon while qui englobait tout le code
Tu peux expliquer STP ?
Marsh Posté le 21-05-2001 à 13:54:50
Moi je pensais que getChar() ct pas possible sous linux...
Marsh Posté le 21-05-2001 à 14:36:28
chupabouc a écrit a écrit : Elle marche très bien cette méthode, c'est celle du K&R |
ouais, en fait c'est moi qui leur ai donné le tuyau ... Kernighan & Richie ? Pfff, y sont perdus sans moi
... à moins que ce n'soit l'inverse ???
PS : vi vi, getchar() marche très bien sous Linux (compilé avec gcc 2.95)
Marsh Posté le 21-05-2001 à 18:15:29
comme disait grahf, utilise un signal, je sais pas le code pour CTRL-D mais juste à titre indicatif CTRL-E c'est le code 2, CTRL-C c'est le code 3, ces valeurs se trouvent dans signal.h
note : c'est pour un OS appellé OS9 qui est a base d'unix donc ça doit être la même chose ...
Marsh Posté le 21-05-2001 à 18:46:43
Ce que je dis, c'est que:
while ((bidule = getchar()) != EOF)
{
tes traitements;
}
Ca doit arriver en fin d'execution de tes traitements avant de retester getchar et repartir pour un tour de boucle.
Le Ctrl-D ne suspend pas l'execution du traitement.
Si le traitement est court, cela sera imperceptible, sinon, non.
Et 300 lignes de code, ca peut s'executer tres vite.
Met un wait(2 mn) au milieu des traitements et tu vas voir que le Ctrl-D n'arrete pas le programme instantanement.
A+,
[edit]--Message édité par gilou--[/edit]
Marsh Posté le 20-05-2001 à 15:29:57
Tout est dans le titre: j'ai fait un petit programme sous Linux en C et je dois le quitter avec ctrl D.
Comment faire? Y a t il un code ascii specifique?
merci