probleme langage c
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

probleme langage c



  1. #1
    MANTA..

    probleme langage c


    ------

    Bonjour à tous,
    cette fois j'ai besoin de votre aide car on ma donné le squelette d'un programme. Et pour réaliser une certaine fonction, je dois utiliser cet argument --> char *cmds[MAXCMDS][MAXARGS] en l'utilisant comme argument pour execvp (int execvp( const char *file, char *const argv[])). Le probléme est que c'est la première fois que je vois un argument comme celui là ( X [ ][ ]). étant donné qu'apparament ce qu'elle contient est le nom de commandes associé a leurs argument , pouvez vous me dire comment je dois faire pour les utiliser dans execvp?

    Je sais que je m'explique très mal donc n'hesitez pas a me poser des question si vous n'avez pas compis.

    -----
    Dernière modification par MANTA.. ; 17/02/2012 à 18h30.

  2. #2
    MANTA..

    Re : probleme langage c

    il y a maximum 2 commande donc MAXCMDS=2, j'ai essayé plusieurs chose mais a chaque fois il me met :

    error: passing argument 1 of ‘execvp’ from incompatible pointer type
    /usr/include/unistd.h:573: note: expected ‘const char *’ but argument is of type ‘char **’
    Dernière modification par MANTA.. ; 17/02/2012 à 18h37.

  3. #3
    whoami

    Re : probleme langage c

    Bonjour

    X [ ][ ]

    est un tableau à 2 dimensions d'éléments du type X.

    Pour le reste, cherche un peu.

  4. #4
    MANTA..

    Re : probleme langage c

    merci pour la réponse, j'ai cherché mais je ne vois pas comment passer ces arguments a execvp

  5. A voir en vidéo sur Futura
  6. #5
    invite4492c379

    Re : probleme langage c

    Citation Envoyé par MANTA.. Voir le message
    Bonjour à tous,
    cette fois j'ai besoin de votre aide car on ma donné le squelette d'un programme. Et pour réaliser une certaine fonction, je dois utiliser cet argument --> char *cmds[MAXCMDS][MAXARGS] en l'utilisant comme argument pour execvp (int execvp( const char *file, char *const argv[])). Le probléme est que c'est la première fois que je vois un argument comme celui là ( X [ ][ ]). étant donné qu'apparament ce qu'elle contient est le nom de commandes associé a leurs argument , pouvez vous me dire comment je dois faire pour les utiliser dans execvp?
    Citation Envoyé par MANTA.. Voir le message
    Je sais que je m'explique très mal donc n'hesitez pas a me poser des question si vous n'avez pas compis.
    Citation Envoyé par MANTA.. Voir le message
    il y a maximum 2 commande donc MAXCMDS=2, j'ai essayé plusieurs chose mais a chaque fois il me met :

    error: passing argument 1 of ‘execvp’ from incompatible pointer type
    /usr/include/unistd.h:573: note: expected ‘const char *’ but argument is of type ‘char **’
    Hello,
    Tu as donné le prototype de execvp :
    Code:
    int execvp(const char* file, char *const argv[]);
    la man page donne quelques explications :

    ...
    The initial argument for these functions is the pathname of a file which is to
    be executed.
    ...
    The execv() and execvp() functions provide an array of pointers to null-termi‐
    nated strings that represent the argument list available to the new program.
    The first argument, by convention, should point to the filename associated with
    the file being executed. The array of pointers must be terminated by a NULL
    pointer.
    ...
    If any of the exec() functions returns, an error will have occurred. The return
    value is -1, and errno will be set to indicate the error.
    ...
    Il suffit de suivre le mode d'emploi :

    En premier paramètre tu passe une chaîne à zéro terminal (string) qui est le chemin vers ton exécutable, en second paramètre tu dois fournir un tableau de string, le dernier string étant NULL.
    Par exemple si tu as

    Code:
    char* cmds[MAXCMD][MAXARGS] = { {"-l", "-h"}, {"-e", "-l", "-f"} }
    Il faudras que tu crées un nouveau tableau de string dans lequel tu copieras les paramètres trouvé dans cmds[cmdsNum] et tu y rajouteras si nécessaire un NULL.

    Si tu as


    Code:
    char* cmds[MAXCMD][MAXARGS] = { {"-l", "-h",NULL}, {"-e", "-l", "-f",NULL} }
    C'est plus simple ton second paramètre (pour execvp) est déjà construit et il te suffit de passer cmds[i] (i est une variable d'itération de 0 à MAXCMD), il faudra toujours donner le nom complet de ton executable en premier paramètre.


    Pour l'exécution de ton execvp je te recommande d'utiliser un fork.


  7. #6
    MANTA..

    Re : probleme langage c

    Après avoir passé au moins 6 heures a essayer de résoudre ce problème j'ai fini par demander la solution à quelqu'un, au final il a juste fallu que pour le execvp je mette ca --> execvp(*cmds[0], cmds[0]); et pour la deuxiéme commande ca --> execvp(*cmds[1], cmds[1]); .... après avoir fait ca, ca a tout de suite marché.

    Merci beaucoup pour avoir pris le temps de m'aider
    Dernière modification par MANTA.. ; 09/03/2012 à 11h58.

Discussions similaires

  1. probleme en langage C
    Par invitea0383756 dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 12/12/2009, 13h02
  2. J'ai un problème de langage c
    Par invitecfe0939f dans le forum Logiciel - Software - Open Source
    Réponses: 6
    Dernier message: 23/11/2008, 15h33
  3. Petit problème en langage C. Please Help!
    Par invite00a39544 dans le forum Électronique
    Réponses: 4
    Dernier message: 25/03/2007, 17h33
  4. Problème en langage VBA
    Par invite588da7a7 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 09/07/2004, 13h00