Lister un fichier .tar

Lister un fichier .tar - C - Programmation

Marsh Posté le 07-07-2008 à 15:59:24    

Bonjour pour un projet je souhaiterai lister les fichiers present dans une tarball (compresser a l'aide de gnu tar (.tar)) en langage C ^^, je souhaiterais savoir s'il existe une bibliotheque pour sa. laquelle ?
Sinon comment puis-je faire sa proprement (sous unix) ?
 
Merci
Bonne journée
 
ps : sa fait un moment que je cherche et j'ai toujours rien trouvé


---------------
Mieux vaux tar que gz
Reply

Marsh Posté le 07-07-2008 à 15:59:24   

Reply

Marsh Posté le 07-07-2008 à 16:33:49    

Reply

Marsh Posté le 07-07-2008 à 16:39:21    

Oui merci mais je n'es pas le droit d'utiliser sa , je dois vraiment tout refaire merci

Reply

Marsh Posté le 07-07-2008 à 16:43:21    

Ah.
 
Ben dans ce cas tu regardes le format du TAR ( http://www.google.fr/search?q=tar+format => page wikipedia par exemple), tu lis le premier bloc d'information, tu l'interprètes, tu passes le bloc de données grace à l'information sur la taille, tu lis le nouveau bloc d'information que tu y trouves, rinse & repeat.

Reply

Marsh Posté le 07-07-2008 à 16:49:37    

oui ce que je suis entrain de faire la , merci bcp
 
Bonne journée

Reply

Marsh Posté le 07-07-2008 à 18:13:09    

Je m'ennuyais alors j'ai écrit ça viteuf :

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. struct tarheader {
  6.   char filename[100];
  7.   char mode[8];
  8.   char uid[8];
  9.   char gid[8];
  10.   char size[12];
  11.   char last[12];
  12.   char cksum[8];
  13.   char typeflag;
  14.   char linkname[100];
  15.   char ustar[8];
  16.   char uname[32];
  17.   char gname[32];
  18.   char devicemajor[8];
  19.   char deviceminor[8];
  20.   char prefix[155];
  21.   char padding[12];
  22. } ;
  23.  
  24. void listContent(FILE * f) {
  25.   struct tarheader h;
  26.  
  27.   while ( fread(&h, sizeof(struct tarheader), 1, f) != 0 ) {
  28.      /* Blague de barbu : les numeriques sont codes en octal [:petrus75] */
  29.      long size = strtol(h.size, NULL, 8);
  30.      /* chaque bloc pese 512 bytes tout rond, a prendre en compte avant lecture du fichier suivant */
  31.      long padding = 512-size%512;
  32.  
  33.      printf("%s\n", h.filename);
  34.      fseek(f, size  + padding, SEEK_CUR);
  35.   }
  36. }
  37.  
  38. int main(int argc, char **argv) {
  39.   if ( argc == 2 ) {
  40.      FILE * tarfile = fopen(argv[1], "rb" );
  41.      
  42.      if ( tarfile ) {
  43.         listContent(tarfile);
  44.         fclose(tarfile);
  45.      }
  46.      else {
  47.         fprintf(stderr, "Unable to open '%s'\n", argv[1]);
  48.         return EXIT_FAILURE;
  49.      }
  50.   }
  51.   else {
  52.      fprintf(stderr, "Usage : %s <tarfile>\n",argv[0]);
  53.      return EXIT_FAILURE;
  54.   }
  55.      
  56.   return EXIT_SUCCESS;
  57. }


Message édité par Elmoricq le 07-07-2008 à 18:15:48
Reply

Sujets relatifs:

Leave a Replay

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