Forums Rue-Montgallet.com
Rue-Montgallet.comRue-Hardware.comRue-Occasion.comRue-DVD.comRue-Jeuxvideo.comRue-AudioVideo.comRue-Telephone.comForums
S'inscrire | S'identifier |
| Recherche avancée | Aide
 
 

Il y a 54 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici

 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet :

[C++]Ligne de commandes Linux

 
n°3003
Nodashi
Silence je dors
Profil : Dinosaure
Posté le 28-01-2003 à 19:57:36  profilanswer
 

Comment peut on recuperer les resultats d'une commande dans un programme C++


---------------
informatique / jeu vidéo / blog du développeur / Pour les hommes modernes
n°3004
spy
Secure by design
Profil : Habitué
Posté le 29-01-2003 à 09:08:28  profilanswer
 

Ben il faut que tu mettes des traces dans ton prog

n°3007
Nodashi
Silence je dors
Profil : Dinosaure
Posté le 29-01-2003 à 18:58:36  profilanswer
 

spy a écrit :

Ben il faut que tu mettes des traces dans ton prog  




 
Va plus loin dans ta pensée je t'autorises à t'exprimer en toute trankilité


---------------
informatique / jeu vidéo / blog du développeur / Pour les hommes modernes
n°3012
bugsan
Profil : Jeune recrue
Posté le 29-01-2003 à 21:44:36  profilanswer
 

j'ai pas compris ce que tu voulais faire ...
tu comptes executer un programme via un fork() et un execv() ?

n°3022
Nodashi
Silence je dors
Profil : Dinosaure
Posté le 29-01-2003 à 23:09:39  profilanswer
 

bugsan a écrit :

j'ai pas compris ce que tu voulais faire ...
tu comptes executer un programme via un fork() et un execv() ?




 
En fait par exemple je voudrais dans mon programme afficher la liste des fichiers dans le repertoire courant.
 
Puis en faire un tar  
 
etc ...


---------------
informatique / jeu vidéo / blog du développeur / Pour les hommes modernes
n°3114
bugsan
Profil : Jeune recrue
Posté le 06-02-2003 à 09:40:55  profilanswer
 

il faut forker, piper, puis execlp lol
je m'explique : création d'un nouveau processus, ensuite tu joinds sa sortie standard sur un descripteur de fichier de ton processus pere, puis tu executes le ls. tu va récupérés dans le descripteur de fichier l'affichage du ls.
je vais essaié de faire simple
 
 

Code :
  1. #include<sys/time.h>
  2. #include<sys/select.h>
  3. #include<sys/types.h>
  4. #include<unistd.h>
  5. #include<stdlib.h>
  6. #include<stdio.h>
  7. #include<sys/ioctl.h>
  8. void main(int narg, char *argc[]) {
  9.   int n,rf,ds,status,cr;
  10.   char &chaine;
  11.   int p1[2];
  12.   pipe(p1);
  13.   rf=fork();
  14.   if(rf==0) { //fils
  15.     close(p1[0]); // ferme lecture p1
  16.     close(1); // ferme ecriture standard
  17.     dup(p1[1]); //dup ecriture p1 dans standard
  18.     close(p1[1]); // ferme ecriture p1
  19.     execlp("ls","ls","-alF",NULL);
  20.     printf("[1] Erreur execlp ls\n" );
  21.     exit(1);
  22.   }
  23.   close(p1[1]); // ferme ecriture p1
  24.   ds = dup(p1[0]); //dup lecture p1 dans ds
  25.   close(p1[0]); // ferme lecture p1
  26.   fd_set lire;
  27.   FD_ZERO (&lire);
  28.   FD_SET(ds, &lire);
  29.   n = select(1,&lire,NULL,NULL,NULL); 
  30.   while(read(ds,chaine,1)) { //lit 1 caractere
  31.     printf("%c",chaine);
  32.     n = select(1,&lire,NULL,NULL,NULL); 
  33.   }
  34.   printf("\n[-] Le pipe a été fermé\n" );
  35.   /* traitement */
  36.   rf=fork();
  37.   if(rf==0) { //fils
  38.     execlp("tar","tar","-cvf blablabla",NULL);
  39.     exit(1);
  40.   }
  41.   wait(&status); //attent la fin de tar
  42.   printf("Code retour de tar : %d\n",(status >> 8));
  43. }


 
ya surement des erreurs, je te conseille d'aller voir un man page en ligne genre.
http://www.mcsr.olemiss.edu/cgi-bin/man-cgi?execlp

n°3115
bugsan
Profil : Jeune recrue
Posté le 06-02-2003 à 09:42:13  profilanswer
 

merde ya une erreur, faut déclarer char car et faire un read(ds,&car,1);

n°3116
bugsan
Profil : Jeune recrue
Posté le 06-02-2003 à 09:47:09  profilanswer
 

au fait, c'est pour unix/linux...

n°3126
bclinton
Profil : Jeune recrue
Posté le 07-02-2003 à 10:36:11  profilanswer
 

Y'a plus simple :
 

Code :
  1. char * command = "tar cvf toto.tar *.C *.h" ;
  2. system( command ) ;


 
La commande system execute la ligne de commande donnee sous forme de chaine de caractere.
 
En revanche on ne recupere pas le resultat d'une commande de style "ls" de cette facon. Mais il existe d'autres commandes systeme en C pour recuperer une liste de fichiers, de repertoires, etc.

n°3127
bclinton
Profil : Jeune recrue
Posté le 07-02-2003 à 10:47:54  profilanswer
 

Je te conseille de lire les manpages des fonctions C :
 
stat : pour avoir des infos sur un fichier (type, taille, date, etc)
chdir : changer de repertoire
opendir, readdir,scandir, closedir : pour en examiner le contenu.
 
 
Ce sont des fonctions C standard pas trop difficiles a utiliser.


Message édité par bclinton le 07-02-2003 à 10:48:22
n°3883
yann911
Profil : Membre
Posté le 17-04-2003 à 13:30:25  profilanswer
 

Si tu veux quelque chose de générique basé sur la fonction system() décrite plus haut, essaie d'ajouter " > /tmp/systemout" à la chaîne 'command'.
Je n'ai jamais essayé mais tu devrais récupérer la sortie de ton programme dans le fichier.
 


Aller à :
Ajouter une réponse