[C] Coder un archiver/unarchiver tar

Coder un archiver/unarchiver tar [C] - C - Programmation

Marsh Posté le 28-11-2009 à 13:40:34    

Bonjour tout le monde,
J'ai un petit exo a faire et je ne sais pas du tout comment commencer:
Je dois comme dit le sujet faire un archiver/unarchiver de .tar
j'ai vu sur Wiki qu'un .tar contient un header pourchaque fichier qu'il contient mais je ne comprends pas un truc:
 
 
Field Offset  Field Size  Field
0  100  File name
100  8  File mode
108  8  Owner's numeric user ID
116  8  Group's numeric user ID
124  12  File size in bytes
136  12  Last modification time in numeric Unix time format
148  8  Checksum for header block
156  1  Link indicator (file type)
157  100  Name of linked file
 
Link indicator  
field Value  Meaning
'0'  Normal file
(ASCII NUL)  Normal file (now obsolete)
'1'  Hard link
'2'  Symbolic link
'3'  Character special
'4'  Block special
'5'  Directory
'6'  FIFO
 
Donc si je veux gerer l'arborescence de mes dossier je dois utiliser le '5' pr le Link indicator?
 
Sinon niveau algo je compter parser en recursif mes dossier, bufferiser chaque fichier avec les infos correspondante au header et ecrire tout ça ds un fichier .tar et le tester avec winrar. Apres je me plante p-e.
Je vous poste mon bout de code des que j'aurais compris les fonction d'open de write et de tte manip sur files.
merci beaucoup!

Reply

Marsh Posté le 28-11-2009 à 13:40:34   

Reply

Marsh Posté le 29-11-2009 à 14:29:58    

Pour en avoir fait un recement, c'est bien "5" pour les dossiers. Accessoirement, dans les headers il faut forcer une size de 0 pour les dossiers.

Reply

Marsh Posté le 29-11-2009 à 14:38:56    

Ok, Bon j'ai un peu avancer pour le Header mais maintenant je suis bloquer a plusieurs petites choses comme le Checksum ou encore le devmajor et le devminor je sais pas du tt ce que c'est...

Reply

Marsh Posté le 29-11-2009 à 14:51:26    

checksum = addition de la valeur ascii de tout le header (sachant que le checksum fait 8 caracteres et est rempli d'espaces a l'origine) + la valeur d'un espace supplémentaire.

Reply

Sujets relatifs:

Leave a Replay

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