[C] quitter programme avec control D

quitter programme avec control D [C] - Programmation

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

Reply

Marsh Posté le 20-05-2001 à 15:29:57   

Reply

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()!!
@+


---------------
http://www.programmation-fr.com
Reply

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'

Reply

Marsh Posté le 20-05-2001 à 16:50:07    

Tu fais comment donne un exemple stp!!!!!!


---------------
http://www.programmation-fr.com
Reply

Marsh Posté le 20-05-2001 à 17:51:06    

fais des reads sur 0 :)
 
apres analyse tout ca.


---------------
Mes News
Reply

Marsh Posté le 20-05-2001 à 18:26:08    

fait ca avec un signal, ca devrait marcher (man sigaction)

Reply

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+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

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

Reply

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+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

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


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO
Reply

Marsh Posté le 21-05-2001 à 09:37:49   

Reply

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]


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO
Reply

Marsh Posté le 21-05-2001 à 11:06:06    

Ca marche seulement si ses traitements sont brefs.
Sinon ca marche pas cette methode.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

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 ?


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO
Reply

Marsh Posté le 21-05-2001 à 13:54:50    

Moi je pensais que getChar() ct pas possible sous linux...

Reply

Marsh Posté le 21-05-2001 à 13:55:13    

Elle marche très bien cette méthode, c'est celle du K&R  :p

Reply

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  :p




 
ouais, en fait c'est moi qui leur ai donné le tuyau ... Kernighan & Richie ? Pfff, y sont perdus sans moi :D
 
... à moins que ce n'soit l'inverse ??? :lol:
 
PS : vi vi, getchar() marche très bien sous Linux (compilé avec gcc 2.95)


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO
Reply

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 ... :p

Reply

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]


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed