Partage
  • Partager sur Facebook
  • Partager sur Twitter

Comment utiliser execv sous Linux

15 octobre 2007 à 21:24:30

Bonjour,

je me suis mis à programmer en C sous Linux, et je voudrais utiliser la fonction execv. Mais le problème est qu'à l'exécution la fonction n'est pas reconnue, et pire : elle n'est même pas dans le man ! Idem pour les autres fonctions comme execlp, ... et system

Comment dois-je faire pour les utiliser ?
Merci d'avance
  • Partager sur Facebook
  • Partager sur Twitter
15 octobre 2007 à 21:37:11

Quelle erreur as-tu ? Est-ce que tu inclues les bons en-têtes ? avec quelle commande compiles-tu ?
  • Partager sur Facebook
  • Partager sur Twitter
15 octobre 2007 à 21:38:26

Aucune erreur en compliation. Et pour voir si ça vient bien de execv j'ai fait :

  1. execv(mes arguments);
  2. puts("Erreur");
  • Partager sur Facebook
  • Partager sur Twitter
15 octobre 2007 à 21:40:47

Je ne peux plus tester, je ne suis plus sous Linux. Je te dirai ça quand j'y retournerai ;)
merci pour ton aide en tout cas
  • Partager sur Facebook
  • Partager sur Twitter
15 octobre 2007 à 21:49:50

Pense à poster tout le code aussi ; parce que maintenant que tu le dis, si tu passes à ta fonction exactement les mêmes arguments, tu vas te substituer par un processus exactement identique à toi-même et recommencer execv() indéfiniment, non ? il y aura peut-être des problèmes du coup... faudrait voir tout le code. Essaie execv() avec quelque chose de moins tordu. :)
  • Partager sur Facebook
  • Partager sur Twitter
15 octobre 2007 à 22:06:18

Je peux te redonner le code. C'est dans ce genre là :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <sys/wait.h>
  5. int main (void)
  6. {
  7.     char *argv1[2];
  8.     switch (fork())
  9.     {
  10.         case -1:
  11.             puts("Erreur");
  12.             exit(-1);
  13.         case 0: // le fils
  14.             argv1[0] = "ls";
  15.             argv1[1] = NULL;
  16.             execv("ls", argv1);
  17.             break;
  18.         default:
  19.             puts("Je suis le pere\n");
  20.             wait(NULL);
  21.             break;
  22.     }
  23.     return 0;
  24. }
  • Partager sur Facebook
  • Partager sur Twitter
15 octobre 2007 à 22:30:09

execv() prend un chemin de fichier binaire, pas un nom de commande ; tu veux probablement execvp().
  • Partager sur Facebook
  • Partager sur Twitter
16 octobre 2007 à 19:49:23

ouais mon exemple est faux en fait. Il faut mettre :
  1. argv1[0] = "ls";
  2. argv1[1] = NULL;
  3. execv("/bin/ls", argv1);


Du coup ça doit venir de là dans mon code (j'ai pas eu le temps de vérifier sur mon Linux). Mais même si ça marche c'est quand même bizarre que j'ai aucune page de man pour les fonctions exec ni pour system :o
  • Partager sur Facebook
  • Partager sur Twitter
16 octobre 2007 à 20:53:03

Bah ça c'est que ton système n'est pas configuré/installé correctement pour une station de développement, c'est tout. :p
  • Partager sur Facebook
  • Partager sur Twitter
14 octobre 2008 à 23:25:17

J'avais un probleme de ce genre pour les pages du Man et il m'a suffit de les installer en tapant: (sous Debian et Ubuntu)
apt-get install manpages-dev


D'autre part, execv (et toute sa famille) remplace ton programme par celui que tu viens de lancer avec. Tout le code que tu ecriras apres execv* ne sera donc pas execute...

PS: Je sais que le topic est obselete mais peut etre que ca pourra aider quelqu'un ;)
  • Partager sur Facebook
  • Partager sur Twitter

Comment utiliser execv sous Linux

× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
  • Editeur
  • Markdown