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 :

une fonction &


Sujet :

C

  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 une fonction &
    Je bloque vraiment sur un code je ne vois pas comment my prendre

    il y a deux code un qui decoupe les mots un qui les parse

    le premier

    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
    /* decouper  --  decouper une chaine en mots */
    int
    decouper(char * ligne, char * separ, char * mot[], int maxmot){
      int i;
     
      mot[0] = strtok(ligne, separ);
      for(i = 1; mot[i - 1] != 0; i++){
        if (i == maxmot){
          fprintf(stderr, "Erreur dans la fonction decouper: trop de mots\n");
          mot[i - 1] = 0;
          break;
        }
        mot[i] = strtok(NULL, separ);
      }
      return i;
    }
     
    # ifdef TEST
    int
    main(int ac, char * av[]){
      char *elem[10];
      int i;
     
      if (ac < 3){
        fprintf(stderr, "usage: %s phrase separ\n", av[0]);
        return 1;
      }
     
      printf("On decoupe '%s' suivant les '%s' :\n", av[1], av[2]);
      decouper(av[1], av[2], elem, 10);
     
      for(i = 0; elem[i] != 0; i++)
        printf("%d : %s\n", i, elem[i]);
     
      return 0;
    }
    # endif

    et le deuxième qu'on doit changé pour Rajouter la possibilité de lancer des processus en arrière-plan quand la ligne de commande se termine par un &. (indication : il suffit de ne pas faire le wait dans le parent).

    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    # include <stdio.h>
    # include <stdlib.h>
    # include <unistd.h>
    # include <sys/types.h>
    # include <sys/wait.h>
    # include <assert.h>
    # include <string.h>
     
    enum {
      MaxLigne = 1024,              // longueur max d'une ligne de commandes
      MaxMot = MaxLigne / 2,        // nbre max de mot dans la ligne
      MaxDirs = 100,		// nbre max de repertoire dans PATH
      MaxPathLength = 512,		// longueur max d'un nom de fichier
    };
     
    void decouper(char *, char *, char **, int);
     
    # define PROMPT "? "
     
    int
    main(int argc, char * argv[]){
      char ligne[MaxLigne];
      char pathname[MaxPathLength];
      char * mot[MaxMot];
      char * dirs[MaxDirs];
      int i, tmp;  
     
      decouper(strdup(getenv("PATH")), ":", dirs, MaxDirs);
     
     
      for(printf(PROMPT); fgets(ligne, sizeof ligne, stdin) != 0; printf(PROMPT)){
        decouper(ligne, " \t\n", mot, MaxMot);
        if (mot[0] == 0)            // ligne vide
          continue;
     
     
     
        tmp = fork();               // lancer le processus enfant
        if (tmp < 0){
          perror("fork");
          continue;
        }
     
        if (tmp != 0){             // parent : attendre la fin de l'enfant
          while(wait(0) != tmp)
            ;
          continue;
        }
     
     
    				// enfant : exec du programme
        for(i = 0; dirs[i] != 0; i++){
          snprintf(pathname, sizeof pathname, "%s/%s", dirs[i], mot[0]);
          execv(pathname, mot);
        }
                                    // aucun exec n'a fonctionne
        fprintf(stderr, "%s: not found\n", mot[0]);
        exit(1);
      }
     
      printf("Bye\n");
      return 0;
     
    }

    j'ai pensé a utiliser ligne[strlen(ligne) ]) mais je ne vois pas trop comment résoudre ce probème aidez moi svp

    merci

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Quel est ton premier obstacle en fait? Le fait de tester si une chaîne de caractère se termine ou non par '&'?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  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
    Mon obstacle normalement quand je compile les deux code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    gcc -g -Wall co-main.c decouper.c
    a.out
    il me renvoit dans un autre shell

    quand je fais exemple

    normalement il doit m'envoyé un trucs comme sa
    mais comme je n'es pas encore ajouté dans la code de co-main.c la possibilité de lancer des processus en arrière-plan quand la ligne de commande se termine par un &. (indication : il suffit de ne pas faire le wait dans le parent).

    il m'envoit plutot ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ? sleep 10 & sleep: intervalle de temps «&» incorrect Saisissez « sleep --help » pour plus d'informations.

  4. #4
    Membre habitué Avatar de Abacar94
    Homme Profil pro
    L2 Math-informatique
    Inscrit en
    Novembre 2015
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Niger

    Informations professionnelles :
    Activité : L2 Math-informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 103
    Points : 133
    Points
    133
    Par défaut
    tu utilise quel compilateur ??

  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
    Je travail sur linux ubuntu 14 sur la console je compile

  6. #6
    Membre habitué Avatar de Abacar94
    Homme Profil pro
    L2 Math-informatique
    Inscrit en
    Novembre 2015
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Niger

    Informations professionnelles :
    Activité : L2 Math-informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 103
    Points : 133
    Points
    133
    Par défaut
    Citation Envoyé par l1informatique Voir le message
    Je bloque vraiment sur un code je ne vois pas comment my prendre

    il y a deux code un qui decoupe les mots un qui les parse

    le premier
    merci
    le code qui découpe, tu veut qu'il découpe de quel manière ? on prélève une partie ? ou on le subdivise ?


    parse ?????

  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
    Ce que je cherche c'est quand je vais exécuter les deux codes il y a normalement un nouveau shell qui se lance et dans se nouveau shell je veux lancer un arrière plan avec &

Discussions similaires

  1. Comment chronométrer une fonction
    Par 323 dans le forum Pascal
    Réponses: 3
    Dernier message: 19/03/2003, 20h24
  2. [VBA-E] avec une fonction value
    Par laas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/11/2002, 13h22
  3. [Turbo Pascal] Allocation et désallocation de pointeurs dans une fonction
    Par neird dans le forum Turbo Pascal
    Réponses: 13
    Dernier message: 17/11/2002, 20h14
  4. Une fonction avec des attributs non obligatoires
    Par YanK dans le forum Langage
    Réponses: 5
    Dernier message: 15/11/2002, 13h39

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