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

 


Dernière réponse
Sujet : [C] quitter programme avec control D
gilou 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]


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
gilou 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]

*syl* 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
Aricoh

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)

chupabouc Elle marche très bien cette méthode, c'est celle du K&R  :p
AirBg Moi je pensais que getChar() ct pas possible sous linux...
Aricoh

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 ?

gilou Ca marche seulement si ses traitements sont brefs.
Sinon ca marche pas cette methode.
A+,
Aricoh Et je crois qu'il peut y avoir encore + simple :
 
while (! (getchar() = EOF))

 

[edit]--Message édité par Aricoh--[/edit]

Aricoh 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
gilou 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+,
la viper va chercher de l'aide sur la fonction
 
int bioskey(int c);
 
 
tu peux recuperer la valeur hexa de la touche selectionnée
gilou 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+,
grahf fait ca avec un signal, ca devrait marcher (man sigaction)
R@NNIS fais des reads sur 0 :)
 
apres analyse tout ca.
BIGBEN2 Tu fais comment donne un exemple stp!!!!!!
zop Le seul moyen qui me vient à l'esprit, c'est de faire un boucle qui lit les entrées au clavier jusqu'à rencontrer 'eof'
BIGBEN2 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()!!
@+
noarfox 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

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)