copier le résultat d'une commande dans un fichier

copier le résultat d'une commande dans un fichier - Programmation

Marsh Posté le 31-03-2006 à 14:52:27    

Bonjour,
Quelqu'un saurait comment copier le résultat d'une commande dans un fichier? Par exemple
~# ifconfig eth0
eth0      Lien encap:Ethernet  HWaddr 00:xx:xx:xx:xx:xx  
          inet adr:192.1xx.xx.xxx  Bcast:192.1xx.xx.xxx  Masque:255.xxx.xxx.x
          adr inet6: feXX::xxx:xxxx:xxxx:xxxx/xx Scope:Lien
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000  
          RX bytes:0 (0.0 b)  TX bytes:378 (378.0 b)
          Interruption:12 Adresse de base:0xd800  
 
Récupérer ce résultat dans un autre fichier.
Merc

Reply

Marsh Posté le 31-03-2006 à 14:52:27   

Reply

Marsh Posté le 31-03-2006 à 14:55:32    

ifconfig eth0 > mon_fichier ?


---------------
-~- Libérez Datoune ! -~- Camarade, toi aussi rejoins le FLD pour que la flamme de la Révolution ne s'éteigne pas ! -~- A VENDRE
Reply

Marsh Posté le 31-03-2006 à 15:49:51    

Plus d'explication s'il te plaît.
Merci
 

Reply

Marsh Posté le 31-03-2006 à 15:55:13    

Reply

Marsh Posté le 31-03-2006 à 15:55:15    

lis de la documentation sur les redirections d'entrées / sorties en shell.
 
dans la commande que t'a donnée mirtouf :

ifconfig eth0 > mon_fichier

le '>' sert à rediriger la sortie de l'instruction 'ifconfig eth0' dans le fichier 'mon_fichier'.


---------------
TriScale innov
Reply

Marsh Posté le 31-03-2006 à 15:59:37    

Donc je mets cela dans mon programme?

Reply

Marsh Posté le 31-03-2006 à 16:02:42    

quel programme ?
on t'a fournis une commande exécutable dans un shell.

Reply

Marsh Posté le 31-03-2006 à 16:05:50    

Je suis entrain de faire un programme qui permet de lire un fichier et d'extraire des informations de ce fichier.
Ce fichier est le résultat par exemple de # ifconfig eth0.
Le but est de pouvoir le mettre dans un fichier que je vais ensuite utiliser.

Reply

Marsh Posté le 31-03-2006 à 16:08:08    

ah, oui un programme en C.
Tu peux l'appeler avec system
Ex:

ret=system("ifconfig eth0 > mon_fichier" );


Message édité par jlighty le 31-03-2006 à 16:08:53
Reply

Marsh Posté le 31-03-2006 à 16:15:33    

OK!
Je te tiens au courant si cela fonctionne.
Merci

Reply

Marsh Posté le 31-03-2006 à 16:15:33   

Reply

Marsh Posté le 31-03-2006 à 16:16:07    

ça marche pas.
merci

Reply

Marsh Posté le 31-03-2006 à 16:18:47    

la cat "programmation" est surement plus indiquée...

Reply

Marsh Posté le 31-03-2006 à 16:24:31    

tu peux aussi te passer de fichier intermédiaire en faisant

Code :
  1. FILE *fichier=popen( "ifconfig eth0", "r" )


 
tu lis directement la sortie standard de 'ifconfig eth0' dans ton flux.


---------------
TriScale innov
Reply

Marsh Posté le 31-03-2006 à 16:33:15    

Mais il ne compile pas voici mon code:  
 
#include<stdio.h>
#include<string.h>
#include <stdlib.h>
 
 
/*copier le résultat d'une commande dans un fichier*/
 
FILE *fichier=popen( "&#034;ifconfig eth0", "r" ) /
 
     
  int nblignefichier(char fichier[40])
   {
   int n = 0; /* nombre de lignes lues */
   char ligne[256];
   FILE *f = fopen( fichier, "r" ); /* ouvre en lecture */
   if (f==NULL) {
     printf("erreur ouverture\n" );
     return 0;        /* sort du programme (code erreur 1) */
   }
   while (fgets( ligne, 256, f ) != NULL) { /* essai lecture ligne */
       n++;                                  
   }
   fclose(f);  /* ferme le fichier */
   return n;
  }

Reply

Marsh Posté le 31-03-2006 à 16:48:14    

où est le main() ?
un ";" après FILE *fichier...

Citation :

Mais il ne compile pas voici mon code:  


Quelles erreurs ?


Message édité par jlighty le 31-03-2006 à 16:48:47
Reply

Marsh Posté le 31-03-2006 à 16:52:35    

c'est pas

&#034;

mais un

"


leforum bug un peu...
 
Si tu disais ce que tu voulais faire, on pourrait t'aider un peu mieux
Tu as des connaissances en programmation C ?

Reply

Marsh Posté le 31-03-2006 à 16:55:21    

Autre chose, quel est le but de ton programme ? car il est probable qu'un langage comme Perl, sh suffisent au lieu de sortir l'artillerie lourde (C)

Reply

Marsh Posté le 31-03-2006 à 16:56:38    

jlighty a écrit :

Autre chose, quel est le but de ton programme ? car il est probable qu'un langage comme Perl, sh suffisent au lieu de sortir l'artillerie lourde (C)


[:plusun]


---------------
TriScale innov
Reply

Marsh Posté le 31-03-2006 à 17:10:54    

Je me débrouille un peu en C, le seul langage que j'apprends.
Je m'explique à nouveau.
J'ai déjà fait un programme pour lire un fichier contenant des informations spécifiques. Mon problème est de pouvoir directement utiliser le fichier dans mon programme.
En supposant que le fichier est par exemple test.dat et que je connais sa structure, voilà le programme qui va avec:  
 
#include<stdio.h>
#include<string.h>
#include <stdlib.h>
 
 
typedef struct {
   int nb1;
   int nb2;
   char t1[40];
   char t2[40];
   char t3[40];
   char t4[40];
     }bloc;
 
int nblignefichier(char arg2[40])
   {
   int n = 0; /* nombre de lignes lues */
   char ligne[256];
   FILE *f = fopen( arg2, "r" ); /* ouvre en lecture */
   if (f==NULL) {
     printf("erreur ouverture\n" );
     return 0;        /* sort du programme (code erreur 1) */
   }
   while (fgets( ligne, 256, f ) != NULL) { /* essai lecture ligne */
       n++;                                  
   }
   fclose(f);  /* ferme le fichier */
   return n;
  }
 
 
 
int main(void)
{
int i,a,taille,pos1;
 
/* Sélectionner le fichier*/  
exec("" );
 
/*FILE *fichier = popen( "&#034;ls /proc", "r" );*/
FILE* lecture = fopen("test.dat","r" );
taille = nblignefichier("test.dat" );
 
//création du tableau de taille "taille"
bloc b[taille];
 
char nb[255];
//remplissage du tableau
for(i=0;i<taille;i++)
{
 fscanf(lecture, "%s", &nb);
 b[i].nb1 = atoi(nb);
 fscanf(lecture, "%s", &nb);
 b[i].nb2 = atoi(nb);
 fscanf(lecture, "%s", &b[i].t1);
 fscanf(lecture, "%s", &b[i].t2);
    fscanf(lecture, "%s", &b[i].t3);
    fscanf(lecture, "%s", &b[i].t4);
   
 
 
 }
/* pclose(fichier);*/
fclose(lecture);
 
 //affichage du tabeau
 for(i=0;i<taille;i++)
 {
 printf("%d %d %s %s %s %s\n",b[i].nb1,b[i].nb2,b[i].t1,b[i].t2,b[i].t3,b[i].t4);
 }
 system("PAUSE" );
 
// la 1ere colonne s'obtient avec b[i].nb1
// la 2e colonne s'obtient avec b[i].nb2
return EXIT_SUCCESS;
 
}
 
Cependant, test.dat doit être le fichier contenant le résultat de 'ls /proc' selon cet exemple.
Je voudrais faire la même chose pour le résultat de 'ifconfig'...
Le problème est de pouvoir mettre dans un fichier chaque résultat de chaque commande.
Je pousse des cheveux blancs, aidez moi!!!
Merci

Reply

Marsh Posté le 31-03-2006 à 17:24:41    

d'accord c'est plus un challenge personnel :)

Citation :

Le problème est de pouvoir mettre dans un fichier chaque résultat de chaque commande.


system("/sbin/ifconfig > test.dat" );


ne marche pas ? erreur de compilation ?
Juste par curiosité : après avoir parsé le fichier test.dat,  que feras tu des données ? (mise à part leur affichage)
PS: utilise la balide "cpp" pour mettre en forme ton code dans ton post.


Message édité par jlighty le 31-03-2006 à 17:28:27
Reply

Marsh Posté le 31-03-2006 à 17:29:51    

Je mets system("/sbin/ifconfig > test.dat" ); où?
merci

Reply

Marsh Posté le 31-03-2006 à 17:36:32    

ben juste après ton commentaire /* Sélectionner le fichier*/  
Ainsi le fichier test.dat contiendra le résultat de la commande ifconfig puis le parsage s'effectuera (nblignefichier()..).

Reply

Marsh Posté le 31-03-2006 à 17:39:24    

OK.
Merci. Je te donnes les résultats dans deux min

Reply

Marsh Posté le 31-03-2006 à 17:42:21    

Compilation OK.
A l'exécution: "Le chemin d'accès spécifié est introuvable".
C'est déjà une bonne voie.
Merci, je vais chercher encore suivant cette piste et trouver le chemin exact du fichier.
Merci.

Reply

Marsh Posté le 31-03-2006 à 17:46:10    

bizarre, je viens de faire un test  


#include <stdio.h>
int main(void)
{
system("/sbin/ifconfig > /tmp/toto.dat" );
return 1;
}


et ça marche, /tmp/toto.dat contient le résultat de ifconfig

Reply

Marsh Posté le 31-03-2006 à 17:52:25    

C'est vrai ton programme marche, je viens de le tester aussi.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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