IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

catcher un signal control C lors d'un execvp


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 9
    Points : 6
    Points
    6
    Par défaut catcher un signal control C lors d'un execvp
    Bonjour,

    je vais essayer d'etre clair:

    je fais un minishell,
    imaginons que j'y tape la commande cat
    un sous shell va s'ouvrir,
    si je fait ctrl C
    cela va quitter mon programme...
    Je souhaiterai pouvoir recuperer ce signal pour retourner a mon prompt...

    Pour l'instant voila mon code qui va executer cat...
    que dois-je y ajouter?

    argv[0] va contenir cat
    et exe contient le nom de mon programme.

    J'espere que vous pourrais m'inspirer...
    Merci par avance!

    1 int execspl(char *argv[], char *exe)
    2 {
    3 int status;
    4 pid_t pid;
    5 int i;
    6
    7 if ((pid = fork()) == -1)
    8 perror("fork");
    9 else
    10 if (pid == 0)
    11 {
    12 if (execvp(argv[0], argv) == -1)
    13 {
    14 printf("%s: %s: command not found\n", exe, argv[0]);
    15 exit (127);
    16 }
    17 }
    18 else
    19 {
    20 waitpid(pid, &status, 0);
    21 if (WIFEXITED(status))
    22 return WEXITSTATUS(status);
    23 else
    24 return 1;
    25 }
    26 }

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    j'ai oublier:
    j'imagine bien qu'il faut utiliser sigaction... mais comment... dans le fils, le pere??
    je l'ai jamais utliser...

    et desoler pour le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
     
         1  int execspl(char *argv[], char *exe)
         2  {
         3    int status;
         4    pid_t pid;
         5    int i;
         6
         7    if ((pid = fork()) == -1)
         8      perror("fork");
         9    else
        10      if (pid == 0)
        11        {
        12          if (execvp(argv[0], argv) == -1)
        13            {
        14              printf("%s: %s: command not found\n", exe, argv[0]);
        15              exit (127);
        16            }
        17        }
        18      else
        19        {
        20          waitpid(pid, &status, 0);
        21          if(WIFEXITED(status))
        22            return WEXITSTATUS(status);
        23          else
        24            return 1;
        25        }
        26  }
    c mieux non...
    :-)

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    J'ai changer la fin du code...
    mais ca change tjrs rien... J'ai du mal a comprendre le fonctionnement des signaux...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    1    if ((pid = fork()) == -1)
         2      perror("fork");
         3    else
         4      if (pid == 0)
         5        {
         6          if (execvp(argv[0], argv) == -1)
         7            {
         8              printf("%s: %s: command not found\n", exe, argv[0]);
         9              exit (127);
        10            }
        11        }
        12      else
        13        {
        14          waitpid(pid, &status, 0);
        15          if (WIFEXITED(status))
        16            return WEXITSTATUS(status);
        17          else
        18            if (WIFSIGNALED(status))
        19              {
        20                printf("fils mort avec signal (%d)\n", WTERMSIG(status));
        21                return WTERMSIG(status);
        22              }
        23            else
        24              printf("Not a exit not a signal\n");
        25        }
        26  }

Discussions similaires

  1. Generation signal control moteur via RS232
    Par Invité dans le forum MATLAB
    Réponses: 2
    Dernier message: 31/05/2012, 02h10
  2. trigger me signal une erreur lors de son exécution
    Par scofild20 dans le forum SQL
    Réponses: 7
    Dernier message: 02/05/2009, 14h22
  3. Réponses: 5
    Dernier message: 25/04/2007, 16h58
  4. probleme lors d'une requete sql (controle non activé)
    Par junty dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 09/09/2005, 15h45
  5. Réponses: 2
    Dernier message: 12/07/2004, 11h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo