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 :

execv ne fonctionne pas


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 110
    Par défaut execv ne fonctionne pas
    Bonjour,

    j'aimerai exécuter un programme java via la fonction execv.
    Pour cela, j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char *arguments[2]= {"java -cp /home/toto test a b", NULL };
    execv("usr/bin/java",arguments);
    mais ça ne fonctionne pas. Je n'ai aucune erreur. En principe le programme devrait m'imprier a et b.

    Remarque : -cp dans la commande c'est pour exécuter un programme java sans se trouver dans son dossier

    Merci

  2. #2
    Membre expérimenté Avatar de Grulim
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 234
    Par défaut
    ce que tu fait n'équivaut-il pas à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    usr/bin/java java -cp /home/toto test a b
    ?
    y a pas un "java" de trop ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 110
    Par défaut
    Bonjour,

    je viens d'essayer et sans succès. Il ne se passe toujours rien.

    Je pensais que le première argument servais à indiquer le programme, donc ici java, et qu'après il fallait encore remettre la commande.

    Je me suis basé sur cet exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    main()
    { 
      char *argv[2]= {"ls", NULL };
       execv("/bin/ls",argv);
    }
    Ceci fonctionne bien. Par contre, si je met ls à la place de /bin/ls, j'ai exactement le même comportement que pour mon programme, c'est à dire rien.

    Afin de savoir où ce trouve java, j'ai tapé "whereis java" et il m'indique "usr/bin/java"

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Utilise plutôt execvp() que execv(). Le 'p' de execvp signifie que ton binaire est recherché dans le PATH (ce qui explique pourquoi '/bin/ls' fonctionne et pas 'ls')

    Autre chose, tu es sûr que c'est "usr/bin/java" et pas "/usr/bin/java" ?
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 110
    Par défaut
    Effectivement il s'agissait bien de /usr/bin/java Merci.

    J'ai cependant du "éclater" la chaine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char *arguments[7]= {"java", "-cp", "/home/toto", "test", "a", "b", NULL };

    J'ai une autre question concernant execv : lorsque l'on veut exécuter un programme en C, que place-t-on à la place de /urs/bin/java?

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 4
    Par défaut
    Citation Envoyé par dvp_zero Voir le message
    Effectivement il s'agissait bien de /usr/bin/java Merci.

    J'ai cependant du "éclater" la chaine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char *arguments[7]= {"java", "-cp", "/home/toto", "test", "a", "b", NULL };

    J'ai une autre question concernant execv : lorsque l'on veut exécuter un programme en C, que place-t-on à la place de /urs/bin/java?
    Regarde ton exemple du dessus, "ls" est code en C.

  7. #7
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par dvp_zero Voir le message
    J'ai cependant du "éclater" la chaine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char *arguments[7]= {"java", "-cp", "/home/toto", "test", "a", "b", NULL };
    Juste une petite remarque en passant, lorsque tu initialises un tableau lors de sa création, tu n'es pas obligé de fournir la taille du tableau le compilateur se débrouillant pour déterminer la taille nécessaire pour stocker l'ensemble des valeurs passées dans l'initialisation.

    Ce qui évite des erreurs d'étourderie lors d'une évolution. Ainsi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char *arguments[]= {"java", "-cp", "/home/toto", "test", "a", "b", NULL };
    fonctionne tout aussi bien.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 110
    Par défaut
    Bonjour,

    existe-t-il une fonction de la famille exec qui autorise de prendre la chaine en une seule fois?

    Ceci m'éviterai de devoir la découper...

    J'ai cherché, je n'ai trouvé que execv et execl qui prennent respectivement une liste et un tableau... mais aucune ne prendre la chaine entière.

    exemple : execv("usr/bin/java","java -cp /home/toto test a b");


    Cela n'existe pas?

Discussions similaires

  1. Réponses: 6
    Dernier message: 27/01/2004, 11h14
  2. [FP]Writeln ne fonctionne pas !
    Par néo333 dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 01/11/2003, 23h47
  3. UNION qui ne fonctionne pas
    Par r-zo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/07/2003, 10h04
  4. Un Hint sur un PopupMenu ne fonctionne pas !!??
    Par momox dans le forum C++Builder
    Réponses: 6
    Dernier message: 26/05/2003, 16h48
  5. ca ne fonctionne pas (generateur auto-incrémentant)
    Par tripper.dim dans le forum SQL
    Réponses: 7
    Dernier message: 26/11/2002, 00h10

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