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

Linux Discussion :

fonction processus if


Sujet :

Linux

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 208
    Points : 60
    Points
    60
    Par défaut fonction processus if
    Bonjour,

    je ne me retrouve pas depuis plus de deux semaine sans vain pour résoudre ce problème il s'agit

    Ecrire une commande mon-if qui lancera un processus, puis en lancera un second si le premier a réussi. Par exemple mon-if ’true’ ’echo reussi’ affichera reussi alors que mon-if ’false’ ’echo raté’ n’affichera rien. Prévoir le cas où les commandes contiennent plusieurs mots, comme dans mon-if ’echo foo’ ’echo bar’.

    Le but est d'avoir une commande qui
    (1) lance une première commande [avec l'équivalent de spawn mais ce
    serait bien d'utiliser PATH]
    (2) si la première commande se termine bien, elle en lance une seconde
    (avec de nouveau un équivalent de spawn].

    Les deux commandes doivent venir de argv[1] et argv[2].


    je ne vois pas comment répondre a cette question de l'aide svp

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 378
    Points
    19 378
    Par défaut
    Bonjour,

    tu peux nous exposer le contexte, s'il te plaît ?

    tu utilises un traducteur ? alors changes-en !
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 208
    Points : 60
    Points
    60
    Par défaut
    J'ai un souci avec la compréhension de cet exercice.
    Il nous demande d'écrire une commande qui lancera un processus, puis en lancera un second si le premier a réussi. Par exemple mon-if 'true' 'echo reussi' affichera reussi alors que mon-if 'false' 'echo raté' n'affichera rien et demande de prévoir le cas où les commandes contiennent plusieurs mots, comme dans mon-if 'echo foo' 'echo bar'.
    De quoi s'agit-il de faire au juste ? si quelqu'un peut m'éclaircir.

    il 'sagit d'un cours de bash, et on plus de détail il demande :

    avoir une commande qui
    (1) lance une première commande [avec l'équivalent de spawn mais ce
    serait bien d'utiliser PATH]
    (2) si la première commande se termine bien, elle en lance une seconde
    (avec de nouveau un équivalent de spawn].

    Les deux commandes doivent venir de argv[1] et argv[2].

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 378
    Points
    19 378
    Par défaut
    il 'sagit d'un cours de bash
    t'es sûr ?

    parce que :
    avoir une commande qui
    (1) lance une première commande [avec l'équivalent de spawn mais ce
    serait bien d'utiliser PATH]
    (2) si la première commande se termine bien, elle en lance une seconde
    (avec de nouveau un équivalent de spawn].

    Les deux commandes doivent venir de argv[1] et argv[2].
    à part PATH, ce ne sont pas des expressions qu'on utilise en shell/bash.

    c'est peut-être une description compliquée d'une chose très simple...
    ?

    mais bon en shell/bash :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if <COMMAND_1>
    then
       <COMMAND_2>
    else
       <ÉCHEC>
    fi
    argv[n] font sans doute référence aux paramètres positionnels d'un script...
    ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 208
    Points : 60
    Points
    60
    Par défaut
    Non c'est plutot en C justement c'est pour cela je suis perdu et si c'est en scrip comment on va faire ?

  6. #6
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/bin/bash
    eval "$1"
    if [ $? -eq 0 ]; then
       eval "$2"
    fi
    donc finalement on utilise eval le maléfique pour arriver à nos fins, dans le cadre d'un shell-script c'est la seule possibilité qu'il y a de le faire, et c'est typiquement à ne jamais faire
    l'autre "complexité" repose simplement sur l'utilisation de la variable $? qui contient le code de retour de la dernière commande lancée (man bash)

    mais peut-être que tu t'es trompée de section et que c'est un exercice de langage C (ça aurait déjà plus de sens comme exercice) ?

    Edit: pris de vitesse, mais c'était donc bien ce que je pensais

  7. #7
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 208
    Points : 60
    Points
    60
    Par défaut
    Non je pense il faut en C :s

  8. #8
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    ok ok...

    donc l'idée c'est de forker un processus fils dans lequel on exécute la commande passée sur argv[1], et dans le processus père on attend la fin du processus fils, et on récupère son code de retour, là dessus il ne reste plus qu'à faire un if suivi (ou pas) d'un exec

    de la rigueur et un peu de mobilisation intellectuelle devraient aider à faire l'exercice, finalement assez simple quand on a compris le principe

  9. #9
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 208
    Points : 60
    Points
    60
    Par défaut
    simple :s moi je ne vois toujours pas comment le faire un peu d'aide svp

  10. #10
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    ben je viens de te l'expliquer presque pas à pas, à ce stade je ne vois pas comment t'aider plus à part faire le code directement à ta place - ce que je n'ai pas l'intention de faire

    tu pourrais probablement commencer par tenter de faire quelque chose avant de revenir à la charge demander de l'aide, ça donnerait moins l'impression que tu es dans une attitude attentiste et peu impliquée, avec un peu de chance ça incitera quelqu'un -d'autre- à t'aider ensuite, moi je m'arrête ici

  11. #11
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 208
    Points : 60
    Points
    60
    Par défaut
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    # include <stdio.h>
    # include <unistd.h>
    # include <sys/types.h>
    # include <sys/wait.h>
    # include <assert.h>
    # include <stdlib.h>
     
    int spawn (char *fichier, char *arg[]) {
      int t;
      t = fork();
      if ( t < 0 ) {
        perror("fork");
        exit(1);
      }
      if ( t == 0 ) {
        execv(fichier, arg);
        perror("execv");
        exit(1);
      }
      return t;
    }
     
    int main()
     
    {   int t, tt, etat;
     
       char * ter_argumen[] = {"true", "echo réussi\n", 0,};
     
       t = spawn("./my-if", ter_argumen);
     
       if (t<0){
     
          perror("echo");
     
          return 1;
     
       }
     
       tt = wait(&etat);
     
       assert(tt == t);
     
       if (etat != 0){
     
          perror("exec my-if");
     
          return 1;
     
       }
     
    return 1;
     
    }

    Sachant que mon-if est :

    # include <stdio.h>
    # include <unistd.h>
    # include <stdlib.h>
    # include <string.h>

    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
    int main(int k, char * av[])
     
    {   int i;
     
       for (i=1; i<k; i++){
     
          if  (av[i])
     
          printf("réussi\n");
     
          else  
     
          printf("non effectuer\n");
     
       }
     
       return 1;
     
    }

    mais ça me donne tout le temps

    reussi
    exec my-if: SUCCES

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 07/01/2008, 12h19
  2. fonction pour calculer le temps de processus
    Par torNAdE dans le forum Threads & Processus
    Réponses: 2
    Dernier message: 23/10/2006, 15h54
  3. savoir si un processus est en fonctionement
    Par sofienems dans le forum ASP
    Réponses: 1
    Dernier message: 06/07/2006, 14h46
  4. Connaitre le processus qui appelle une fonction API
    Par RazielReaver dans le forum API, COM et SDKs
    Réponses: 9
    Dernier message: 28/05/2006, 13h56
  5. obtenir le path complet d'un processus en fonction de son PID
    Par violent_ken dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 02/05/2006, 16h43

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