Bonjour à tous,
Dans le cadre d'un projet je dois recoder la commande tar avec les options -x et -c sans la compression des fichiers. Je ne vois pas du tout comment faire... quelqu'un pourrait-il me donner des idées? Merci beaucoup!
Bonjour à tous,
Dans le cadre d'un projet je dois recoder la commande tar avec les options -x et -c sans la compression des fichiers. Je ne vois pas du tout comment faire... quelqu'un pourrait-il me donner des idées? Merci beaucoup!
Est-ce que tu dois réaliser un logiciel compatible avec le tar original, donc en respecter le format, ou simplement faire quelque chose dans le même esprit ?
Dans le second cas, Tape Archiver − « tar» − (et même « ar », l'archiveur Unix historique) se contente de concaténer les fichiers en seul, en les préfixant à chaque fois avec un en-tête contenant quelques informations sommaires telles que le nom du fichier, sa taille, éventuellement son chemin sur le disque et ses droits d'accès.
Il te suffit de faire une boucle qui lise un à un les arguments de la ligne de commande et qui, à chaque fois, ouvre le fichier, écrit ses statistiques dans l'archive, puis lis le contenu intégral et le copie en direct dans l'archive également.
Bonsoir,
Non je dois seulement tenir compte de REGTYPE et DIRTYPE... Il faut gérer seulement les fichiers du format USTAR. J'ai compris que pour l'archivage il fallait un header de 512 octets puis le fichier et ainsi de suite mais je ne vois pas comment récupérer les fichiers d'un dossier pour en faire une archive et comment concaténer les fichiers avec les header.
Merci pour vos réponses.
J'ai le même projet à réaliser en ce moment.
Tu ne serais pas dans une école d'ingénieur à côté de Paris (vers le 14ème ?)-> man 42
Pour 'concaténer' les fichiers, je ne vois pas trop comment faire non plus, mais j'ai pensé à la fonction mmap qui permet de faire des projections en mémoire.
Jettes-y un oeil peut-être.
Pour le désarchivage, comment tu t'y prends ?
J'arrive à récupère toutes les infos, mais je ne vois pas comment les 'déconcaténer', c'est-à-dire les rendre physique.
Merci et bon courage !
Quelques indices:
- Contenu d'un dossier: fonctions de <dirent.h>
- Taille d'un fichier ouvert en mode binaire: fseek(SEEK_END) + ftell().
- Contenu d'un fichier ouvert en mode binaire: Faire un buffer de taille raisonnable (genre BUFSIZ ou un de ses multiples), puis faire des fread() en boucle.
Si le fichier est assez petit pour tenir en mémoire, on peut aussi allouer sa taille en une fois et le lire en une fois...- Minimum d'infos à stocker: Taille du nom, nom, taille du fichier, contenu du fichier. Ça suffit pour pouvoir dé-concaténer ensuite.
PS: Si vous êtes à EPITA/Epitech, vous êtes supposés être capables de faire la traduction entre les fonctions standard que je liste et les appels système que vous avez le droit d'utiliser.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Merci pour ces quelques précisions bien utiles.
Ce que je ne comprends pas, c'est comment concaténer les fichiers en mémoire ?
Est-ce que quelques 'write' peuvent suffire ?
Pour chaque fichier, on crée un buffer de 512 octets (le header) et on 'insère' ce buffer avec write.
Merci beaucoup
Partager