Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
987 connectés 

  FORUM HardWare.fr
  Programmation

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1336562
vinoromano
saoule
Posté le 31-03-2006 à 14:52:27  profilanswer
 

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

mood
Publicité
Posté le 31-03-2006 à 14:52:27  profilanswer
 

n°1336563
mirtouf
Light is right !
Posté le 31-03-2006 à 14:55:32  profilanswer
 

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
n°1336564
vinoromano
saoule
Posté le 31-03-2006 à 15:49:51  profilanswer
 

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

n°1336565
jlighty
Posté le 31-03-2006 à 15:55:13  profilanswer
 
n°1336566
franceso
Posté le 31-03-2006 à 15:55:15  profilanswer
 

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
n°1336567
vinoromano
saoule
Posté le 31-03-2006 à 15:59:37  profilanswer
 

Donc je mets cela dans mon programme?

n°1336568
jlighty
Posté le 31-03-2006 à 16:02:42  profilanswer
 

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

n°1336569
vinoromano
saoule
Posté le 31-03-2006 à 16:05:50  profilanswer
 

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.

n°1336570
jlighty
Posté le 31-03-2006 à 16:08:08  profilanswer
 

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
n°1336571
vinoromano
saoule
Posté le 31-03-2006 à 16:15:33  profilanswer
 

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

mood
Publicité
Posté le 31-03-2006 à 16:15:33  profilanswer
 

n°1336572
vinoromano
saoule
Posté le 31-03-2006 à 16:16:07  profilanswer
 

ça marche pas.
merci

n°1336573
notornis
Posté le 31-03-2006 à 16:18:47  profilanswer
 

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

n°1336574
franceso
Posté le 31-03-2006 à 16:24:31  profilanswer
 

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
n°1336575
vinoromano
saoule
Posté le 31-03-2006 à 16:33:15  profilanswer
 

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;
  }

n°1336576
jlighty
Posté le 31-03-2006 à 16:48:14  profilanswer
 

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
n°1336577
l0ky
Posté le 31-03-2006 à 16:52:35  profilanswer
 

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 ?

n°1336578
jlighty
Posté le 31-03-2006 à 16:55:21  profilanswer
 

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)

n°1336579
franceso
Posté le 31-03-2006 à 16:56:38  profilanswer
 

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
n°1336580
vinoromano
saoule
Posté le 31-03-2006 à 17:10:54  profilanswer
 

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

n°1336581
jlighty
Posté le 31-03-2006 à 17:24:41  profilanswer
 

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
n°1336582
vinoromano
saoule
Posté le 31-03-2006 à 17:29:51  profilanswer
 

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

n°1336583
jlighty
Posté le 31-03-2006 à 17:36:32  profilanswer
 

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()..).

n°1336584
vinoromano
saoule
Posté le 31-03-2006 à 17:39:24  profilanswer
 

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

n°1336585
vinoromano
saoule
Posté le 31-03-2006 à 17:42:21  profilanswer
 

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.

n°1336586
jlighty
Posté le 31-03-2006 à 17:46:10  profilanswer
 

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

n°1336587
vinoromano
saoule
Posté le 31-03-2006 à 17:52:25  profilanswer
 

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

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

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

 

Sujets relatifs
inserer une page HTML dans un fichier xslVider un fichier texte
webpart et fichier web.configCopier une feuille Excel d'un classeur à un autre en VBS !
Récupérer l'adresse d'un fichierRevenir d'un caractere dans un fichier
Constantes stockées dans un fichier XMLAffichage fichier .vrml sous Borland
Modifier une partie de fichier son avec jmfComment faire un Select du resultat d'une Procedure Stockée ?
Plus de sujets relatifs à : copier le résultat d'une commande dans un fichier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR