Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2440 connectés 

  FORUM HardWare.fr
  Programmation

  [C] quitter programme avec control D

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] quitter programme avec control D

n°33289
noarfox
Posté le 20-05-2001 à 15:29:57  profilanswer
 

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

mood
Publicité
Posté le 20-05-2001 à 15:29:57  profilanswer
 

n°33292
BIGBEN2
Posté le 20-05-2001 à 15:44:19  profilanswer
 

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
n°33294
zop
1 world, 1 web, 1 Windows
Posté le 20-05-2001 à 15:48:03  profilanswer
 

Le seul moyen qui me vient à l'esprit, c'est de faire un boucle qui lit les entrées au clavier jusqu'à rencontrer 'eof'

n°33301
BIGBEN2
Posté le 20-05-2001 à 16:50:07  profilanswer
 

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


---------------
http://www.programmation-fr.com
n°33302
R@NNIS
Tout est possible ou presque.
Posté le 20-05-2001 à 17:51:06  profilanswer
 

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


---------------
Mes News
n°33304
grahf
Posté le 20-05-2001 à 18:26:08  profilanswer
 

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

n°33318
gilou
Modérateur
Modzilla
Posté le 20-05-2001 à 21:26:35  profilanswer
 

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é!  --
n°33321
la viper
Posté le 20-05-2001 à 22:17:54  profilanswer
 

va chercher de l'aide sur la fonction
 
int bioskey(int c);
 
 
tu peux recuperer la valeur hexa de la touche selectionnée

n°33332
gilou
Modérateur
Modzilla
Posté le 21-05-2001 à 00:29:11  profilanswer
 

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é!  --
n°33359
Aricoh
gentil mais fo po pousser
Posté le 21-05-2001 à 09:37:49  profilanswer
 

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
mood
Publicité
Posté le 21-05-2001 à 09:37:49  profilanswer
 

n°33362
Aricoh
gentil mais fo po pousser
Posté le 21-05-2001 à 09:39:15  profilanswer
 

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
n°33387
gilou
Modérateur
Modzilla
Posté le 21-05-2001 à 11:06:06  profilanswer
 

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é!  --
n°33396
Aricoh
gentil mais fo po pousser
Posté le 21-05-2001 à 11:19:35  profilanswer
 

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
n°33428
AirBg
The Philosopher
Posté le 21-05-2001 à 13:54:50  profilanswer
 

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

n°33429
chupabouc
Put a daemon in your pc !
Posté le 21-05-2001 à 13:55:13  profilanswer
 

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

n°33451
Aricoh
gentil mais fo po pousser
Posté le 21-05-2001 à 14:36:28  profilanswer
 

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
n°33518
*syl*
--> []
Posté le 21-05-2001 à 18:15:29  profilanswer
 

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

n°33523
gilou
Modérateur
Modzilla
Posté le 21-05-2001 à 18:46:43  profilanswer
 

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é!  --

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [C] quitter programme avec control D

 

Sujets relatifs
Testez mon programme utilitaire ! il marche c'est garanti !K'est-ce que vous pensez de mon programme ?
[VBA] création d'un control pendant l'exécution (access2k)Appels de programme en java.....HELP
sortie de programme dans un fichier sous MS-DOSJe cherche un programme qui compresse une image en jpg
besoin d'idee de programme en C pour un debutant.....[c++] Comment fait on pour éteindre le PC à partir d'un programme ?
programme JET pour rendre service s'il vous plait.. si vous l'avez...Comment executer un programme externe en HTML...??
Plus de sujets relatifs à : [C] quitter programme avec control D


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR