Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 26/03/2008, à 18:38

Grumphette

Detourner des signaux en c

Bonjour,

Voila j aimerais que mon programme s'arrête lorsque je j appuie sur ctrl+D. Je sais qu il faut utiliser signaux.h et la primitive mais j ai aucune idée de comment ^^. Si vous pouviez poster un petit exemple...

Merci d'avance

Hors ligne

#2 Le 26/03/2008, à 19:03

Plum

Re : Detourner des signaux en c

Bonsoir,

Dans mon cours je trouve : Les signaux peuvent avoir des origines diverses telles que : retransmis par le kernel, emis par l'utilisateur (attention pas CTRL-D, ca n'a rien a voir).

J'ai fait des test avec signal : ce genre de code ( moche ):

#include <signal.h>

void    catch()
{
  printf("Je recois le signal ctl D, je quitte\n");
  exit(1);
}

int     main()
{
  signal(/*les signaux du man signal*/, catch);
  while (42);
}

Aucun signal ne repond au CTRL-D, et losque tu ouvre un term et tape CTRL-D dans celui ci, le term avant de quitter affiche 'exit'. Il va donc cherche le exit, une sorte de racourcis systeme je pense.
Mon idee serait 'd'intercepter' les touches CTRL associer a D et que tu lui donne l'instruction exit. Je ne sais pas ce que tu fait comme programme mais je pense que cela  doit se rapprocher d'un shell.

Si quelqu'un a mieux, je reste curieuse sur ce point.

Hors ligne

#3 Le 26/03/2008, à 19:40

Grumphette

Re : Detourner des signaux en c

Bonsoir,

C'est effectivement un shell ^^

Hors ligne

#4 Le 27/03/2008, à 10:15

Gari

Re : Detourner des signaux en c

CTRL+D envoit le caractère de "fin de fichier" (EOD). Donc si le programme attend une information de la part de l'utilisateur, il suffit de tester ce caractère.
Et effectivement, ce n'est pas un signal.

Hors ligne

#5 Le 27/03/2008, à 12:54

Grumphette

Re : Detourner des signaux en c

ok ok mais comment mettre ça en place .?

Hors ligne

#6 Le 27/03/2008, à 13:01

philou8237

Re : Detourner des signaux en c

bin logiquement... juste une lecture sur l'entrée standard smile Normalement si tu fais un shell, tu as du prévoir un lexer ? Tu peux donc rajouter, comme 1ere règle du lexer, la détection de ton EOD.

Hors ligne

#7 Le 27/03/2008, à 15:17

Karl_le_rouge

Re : Detourner des signaux en c

Tu confonds avec CTRL+C qui envoie le signal SIGINT.
@Plum: il est déconseillé d'utiliser signal (ANSI), il vaut mieux utiliser sigaction (Posix)

Hors ligne

#8 Le 27/03/2008, à 15:28

philou8237

Re : Detourner des signaux en c

il vaut mieux utiliser sigaction (Posix)

+1

Mais ce n'est pas (plus) le sujet smile

Dernière modification par philou8237 (Le 27/03/2008, à 15:30)

Hors ligne

#9 Le 28/03/2008, à 15:13

Gari

Re : Detourner des signaux en c

je suis presque certain qu'en lisant le man de read, tu dois pouvoir trouver un exemple avec le caractère de fin de fichier EOF (heu pourquoi j'ai mis EOD dans mon message précédent ?? C'est quoi ca ??).

Hors ligne

#10 Le 02/04/2008, à 07:36

Grumphette

Re : Detourner des signaux en c

ok ok. Mais j ai un autre probleme ^^. COmment faire une attente non bloquante

Hors ligne

#11 Le 02/04/2008, à 10:05

philou8237

Re : Detourner des signaux en c

man wait peut etre ?

waitpid a une option WNOHANG qui rend l'appel non bloquant.

Hors ligne

#12 Le 02/04/2008, à 17:00

gene69

Re : Detourner des signaux en c

COmment faire une attente non bloquante

on fait de l'attente active, a ton niveau c'est sufisant smile


Quand le berger est lâche, le loup chie de la laine.
A (draft) guide to UFO Alien-Invasion

Hors ligne