Q0. Créer deux fichiers a.txt et b.txt contenant quelques lignes de texte. Exécutez la commande hd -v a.txt et comprenez ce qui est affiché. Exécutez la commande od -v -Ad -td1z a.txt et comprenez ce qui est affiché.

Le programme tar est un logiciel d'archivage. Il permet de regrouper en un seul fichier plusieurs fichiers et répertoires afin, par exemple, de les stocker ensuite plus facilement, ou de les compresser.

On crée le fichier toto.tar contenant les fichiers a.c, bc.z et 16.64 par la commande:

tar cvf toto.tar a.c bc.z 16.64

On peut extraire les fichiers à partir de l'archive à l'aide de la commande

tar xvf toto.tar

On se contentera de ces deux opérations dans le TP.

Un fichier tar contenant des fichiers 1.txt, 2.txt, ..., n.txt est constitué:

Octets En Hexa Contenu Précisions
0-99 0-63 Nom du fichier Terminé par le caractère \0
100-107 64-6B Permissions Codé en base 8
108-115 6C-73 Propriétaire Codé en base 8
116-123 74-7B Groupe Codé en base 8
124-135 7C-87 Taille Codé en base 8
136-147 88-93 Date de modification Codé en base 8
148-155 94-9B Checksum Voir plus loin
156-156 9C-9C Type Toujours le caractère '0' pour nous
157-511 9D-1FF Divers Rien du tout
Q1. Récupérez et décompressez le fichier zip du TP.
Q2. Décompressez les deux fichiers test1.tar et test2.tar.
Q3. Exécutez la commande hd -v test1.tar | less. Vérifiez que le résultat correspond à la description. Remarquez en particulier qu'à la fin de chaque champ indiqué ci-dessus, il y a un caractère \0 (qu'il ne faudra pas oublier de mettre dans le code).
Q4. Refaites la question précédente une deuxième fois, histoire de vérifier que vous avez bien compris.

On cherche maintenant à réaliser un programme qui crée un .tar à partir d'un ou plusieurs fichiers.

Q5. Le fichier debut.c crée une entête initialement vide, y ajoute deux chaînes à des positions arbitraires, puis met le résultat dans le fichier resultat.tar. Lire et exécutez ce fichier debut.c. Examiner le résultat avec la commande hd -v resultat.tar. Notez en particulier que le "666" n'est pas affiché en entier, car on demande à la fonction snprintf d'afficher le résultat sur 3 caractères, ce qui prend en compte le caractère de fin '\0' qu'il ajoute à la fin de toute chaîne.
Q6. Complétez le fichier debut.c pour qu'il archive le fichier test.txt. A la fin, on doit donc obtenir un fichier resultat.tar très très proche du fichier test1.tar. Il est conseillé de procéder pas à pas en comparant votre résultat avec le fichier test1.tar à l'aide de la commande hd -v. Lire la suite de l'énoncé pour des informations supplémentaires utiles, en particulier sur l'utilisation de la commande stat et sur la manière de calculer la checksum.

La checksum (somme de contrôle) est un entier permettant de contrôler la validité de l'entête du fichier. Elle est calculée comme suit:

Q7. Une fois que votre programme fonctionne correctement, modifiez-le pour qu'il puisse archiver plusieurs fichiers.
Q8. Ecrire un petit programme qui liste l'ensemble des fichiers contenu dans un fichier tar. (Il faut pour cela lire l'entête afin de trouver deux informations: le nom du fichier, et la taille du fichier). Vous pourrez avoir besoin de l'instruction sscanf qui est à scanf ce que sprintf est à printf.
Q9. Complétez ce programme pour écrire un logiciel rudimentaire de désarchivage.

En C

En Python