[Linux] Utiliser une commande dans un programme

Utiliser une commande dans un programme [Linux] - C++ - Programmation

Marsh Posté le 28-12-2002 à 23:59:45    

Comment faites vous pour utiliser une commande dans un programme en C, j'ai essayé :

Code :
  1. #include <unistd.h>
  2. #include <errno.h>
  3. int main(void)
  4. {
  5. char **tmp1 = NULL;
  6. char **tmp2 = NULL;
  7. if ( execve("/bin/ls",tmp1,tmp2) == -1)
  8.  printf("Erreur : %i\n",errno);
  9. return 0;
  10. }


Mais le programme me renvoie :
Erreur : 2

Reply

Marsh Posté le 28-12-2002 à 23:59:45   

Reply

Marsh Posté le 29-12-2002 à 00:19:48    

Olivier51 a écrit :

Comment faites vous pour utiliser une commande dans un programme en C, j'ai essayé :

Code :
  1. #include <unistd.h>
  2. #include <errno.h>
  3. int main(void)
  4. {
  5. char **tmp1 = NULL;
  6. char **tmp2 = NULL;
  7. if ( execve("/bin/ls",tmp1,tmp2) == -1)
  8.  printf("Erreur : %i\n",errno);
  9. return 0;
  10. }


Mais le programme me renvoie :
Erreur : 2


 :non:  execve ne s utilise pas de cette facon !
 
int execve(const char *path, char *const argv[], char *const envp[]);
sinon utilise execlp :
int execlp(const char *file, const char *arg, ...);

Code :
  1. execlp("/bin/ls", "/bin/ls", NULL);


Message édité par MrTonio le 29-12-2002 à 00:23:04

---------------
WoIP - Video and Voice over IP -  http://www.woip.net/
Reply

Marsh Posté le 29-12-2002 à 00:37:21    

Oui en faite je viens de trouver la méthode pour execve :

Code :
  1. #include <unistd.h>
  2. #include <errno.h>
  3. int main(void)
  4. {
  5. char *param[]={"/bin/ls",NULL};
  6. if (execve(param[0],param,NULL) == -1)
  7. printf("Erreur : %i\n",errno);
  8. return 0;
  9. }


 
J'avais oublié que dans les paramètres on comptais aussi le nom du programme ...
 
Merci comme même mrtonio.


Message édité par Olivier51 le 29-12-2002 à 00:43:32
Reply

Marsh Posté le 29-12-2002 à 23:21:09    

Par contre, je fais comment pour exploiter dans mon programme ce que ma commande lancer avec execve m'a renvoyer ??? Est-ce qu'il faut que j'utilise une autre instruction pour lancer ma commande ou execve peut le faire aussi ?

Reply

Marsh Posté le 30-12-2002 à 01:23:42    

Olivier51 a écrit :

Par contre, je fais comment pour exploiter dans mon programme ce que ma commande lancer avec execve m'a renvoyer ??? Est-ce qu'il faut que j'utilise une autre instruction pour lancer ma commande ou execve peut le faire aussi ?


 
il faut ke tu fork ...
sinon ton programme est stoppé apres l execve
 

Code :
  1. #include <unistd.h>
  2. #include <errno.h>
  3. int main(void)
  4. {
  5.   char *param[]={"/bin/ls",NULL};
  6.   if (!fork())
  7.   {
  8.     if (execve(param[0],param,NULL) == -1) 
  9.     {
  10.       printf("Erreur : %i\n",errno);
  11.       exit(1);
  12.     }
  13.   else
  14.   {
  15.      wait();
  16.   }
  17. return 0;
  18. }


---------------
WoIP - Video and Voice over IP -  http://www.woip.net/
Reply

Marsh Posté le 30-12-2002 à 11:43:16    

Ok, merci pour le renseignement, mais le résultat, je le récupère où ?

Reply

Marsh Posté le 30-12-2002 à 11:45:31    

Reply

Marsh Posté le 30-12-2002 à 14:43:17    

Merci lorill, je vais essayer ...

Reply

Marsh Posté le 31-12-2002 à 18:09:09    


 
avec cette commande peut on lancer n'importe quel exe ou bat
cela peut etre utilile pour trouver rapidement une ip en lancant un simple ipconfig o lieu de s'embeter avec des commandes C qui ne sont pas evidente a utiliser  :sleep:  
normal oui, c juste une petite confirmation parce que je n'ai vu que des ls ou truc ds le genre  :lol:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed