Rechercher : dans
Par :

Interruption sous linux en C

Dernière réponse le 26 jan 2008 à 04:41:32 Chabanus, le 18 jan 2008 à 12:27:21 
 Signaler ce message aux modérateurs

Bonjour,
comme vous pouvez le savoir déjà, sous Linux, les signaux corréspondeent à des interruptions logicielles. donc pourrais-vous stp nous aider à trouver ce qui suit :
- le signal (nom & numéro) qui traite l'exception d'une division par zéro ?
- élaborer un prg en C qui déroute l'interruption : erreur de calcul en virgule flottante (Div par zéro)
- élaborer et exécuter un script qui affiche la liste des signaux disponibles et qui lance notre prg executable.

aussi pourrez vous nous donner quelques définitions claires et nettes sur les processus et interruptions ! ( le minimum à savoir)

Ps : Merci d'avance, saches que si on réussira notre Tp, ça sera bien grâce à vous !!
Je vous remercie d'avance !

Configuration: Windows XP
Internet Explorer 7.0

Meilleures réponses pour « Interruption sous linux en C » dans :
[Langage C] C/C++ Erreur de segmentation VoirQu'est ce qu'une erreur de segmentation Vous êtes en train de développer une application sous Linux en C/C++. Tout va bien, ça compile, les oiseaux chantent. Donc vous lancez votre application pour la tester. Et vous obtenez l'un de ces deux...
[Knoppix] Utiliser Knoppix comme CD de secours VoirKnoppix est un LiveCD Linux, c'est à dire qu'il s'agit d'un CD sur lequel vous pouvez démarrer votre ordinateur, et contenant un système Linux complet prêt à l'emploi. Knoppix peut être utilisé comme CD de secours, par exemple pour récupérer vos...
GnuPG : Rappel des principales commandes VoirCommandes Voici un résumé des principales opérations de GnuPG et les lignes de commandes correspondantes: Générer une paire de clés : gpg --gen-key Lister les clés présentes : gpg --list-keys Exporter une clé publique : gpg --armor --export...

1

mamiemando, le 18 jan 2008 à 12:57:36

Tu peux commencer par regarder ici :

http://publications.gbdirect.co.uk/c_book/chapter9/signal_ha­ndling.html

man sigaction

Avec la doc tu devrais t'en sortir. Ensuite, il suffit juste de chercher quelques exemples, et ça devrait rouler !

Bonne chance

Répondre à mamiemando

2

Chabanus, le 18 jan 2008 à 13:16:47

Merci mamiemando je vais jetter un oeil sur ce site, qui me semble d'ailleurs être en anglais, et moi j'suis blue english...

Répondre à Chabanus

3

mamiemando, le 18 jan 2008 à 14:19:38

Lis le man ça devrait suffire
http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man2/­sigaction.2.html

man sigaction

Bonne chance

Répondre à mamiemando

4

Chabanus, le 18 jan 2008 à 17:43:07

Merci de m'aider mamiemando c'est sympa !

Un camarade a moi a fait cela, et j'aimerai qu'on m'explique le programme si c'est possible.
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>

void derouter_interuption(int signum)
{
printf("il y a u une exeption!!!!! oups oups ^^ \n");
exit(EXIT_FAILURE);
}

int main(void)
{
struct sigaction nouvelle_action;

nouvelle_action.sa_handler = derouter_interuption;
sigemptyset(&nouvelle_action.sa_mask);

sigaction(SIGFPE, &nouvelle_action, NULL);

int a=1, b=0;
int c = a/b;

return EXIT_SUCCESS;
}

Je vous remercie d'avance

Répondre à Chabanus

5

Chabanus, le 18 jan 2008 à 20:04:55

Merci comme même ^^

Répondre à Chabanus

6

mamiemando, le 20 jan 2008 à 15:24:03

Le programme écrit proprement ressemble plutôt à ça :

#include <signal.h>
#include <stdio.h>
#include <stdlib.h>

void derouter_interuption(int signum){
    printf("il y a eu une exception (signum = %d) !!!!! oups oups ^^ \n",signum);
    exit(EXIT_FAILURE);
}

int main(){
    struct sigaction nouvelle_action;
    int a=1, b=0,c;

    nouvelle_action.sa_handler = derouter_interuption;
    sigemptyset(&nouvelle_action.sa_mask);
    sigaction(SIGFPE, &nouvelle_action, NULL);
    c = a/b;

    return EXIT_SUCCESS;
}

Grosso modo tu prépares un handler qui va rattraper une exception (ici une division par 0). Ensuite en calculant c tu déclenche cette division par 0. Le handler rattrape l'exception, puis quitte le programme en retournant le code d'exécution EXIT_FAILURE.
(mando@cenedra) (~) $ gcc -W -Wall plop.c
(mando@cenedra) (~) $ ./a.out
il y a eu une exception (signum = 8) !!!!! oups oups ^^

Si tu as eu l'occasion de faire du java ou du c++ les blocs try{ }catch(...){ } c'est un peu la même idée.

Bonne chance

Répondre à mamiemando

7

Chabanus, le 24 jan 2008 à 13:11:36

Je te remercie pour ta réponse mamiemando c'est gentil, bonne continuation pour toi ;)

Répondre à Chabanus

8

mamiemando, le 24 jan 2008 à 17:21:17

De même !

Répondre à mamiemando

9

Chabanus, le 25 jan 2008 à 13:20:04

SaLUT...
Une derniere requête si possible...Je souhaite changer l'apparence du programme tout en ayant le même resultat lors de l'execution...Je vous remercie d'avance...

Répondre à Chabanus

10

mamiemando, le 25 jan 2008 à 14:27:37

Je n'ai pas compris

Répondre à mamiemando

11

Chabanus, le 25 jan 2008 à 15:59:56

Modifier le programme, à titre d'exemple: Changer les variables prédéfinies, modifier l'emplacement des fonctions...En résumé j'aimerai changer le programme de manière à ce que l'ancien ne ressemble plus au nouveau, tout en gardant bien sur le même résultat a l'exécution...Merci !

Répondre à Chabanus

12

mamiemando, le 25 jan 2008 à 19:21:57

Ahah non désolée ça fait partie de l'exercice :-)

Répondre à mamiemando

13

Chabanus, le 25 jan 2008 à 22:20:12

Mais le changement est mimim xD, merci comme même ...
Une simple question : Quel est le type de sa_handler ? merci d'avance...

Répondre à Chabanus

14

 mamiemando, le 26 jan 2008 à 04:41:32
Répondre à mamiemando