Reproduir la commande tar.

Fermé
kunamaro Messages postés 21 Date d'inscription samedi 24 septembre 2011 Statut Membre Dernière intervention 27 février 2021 - Modifié par kunamaro le 30/11/2013 à 13:25
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 4 déc. 2013 à 17:23
Bonjour à tous,

Je m'appelle Thomas, je suis tek1 à epitech, et je suis actuellement entrain de faire un projet dont l'objectif final est de reproduire la commande tar avec un programme fait par nos soins.
Le but n'est pas de me donner un bout de code ou un code entier, mais juste d'en discuter et de trouver/donner des idées.

Pour le moment je dois créé un fichier my archive qui prend comme premier paramètre le fichier destination (l'archive) et qui prend ensuite autant de paramètres que l'utilisateur veut (utilisation de va arg je pense) pour les archiver dans le fichier archive. J'ajouterais que l'archive doit bien entendre pouvoir être désarchiver, ce n'est pas marrant sinon =)

Dans l'une des étapes suivantes, nous devons rendre notre my archive utilisable par la fonction tar du système (en gros refaire purement et simplement tar), donc ça serait bien si j'arrivais à faire ça directement.

Voilà en gros l'objectif!

Je ne maitrise pas encore bien les manipulations de fichier à partir d'un programme (write, open, close et bien d'autres)
Je pense utiliser va arg pour récupérer les différents paramètres, par contre je me demande comment faire pour accéder à un fichier dont on donne le chemin d'accès (donc qui n'est pas dans le dossier courant)... J'ai bien une idée mais elle parais un peu trop compliquée pour la chose (tout simplement récupérée chaque nom de dossier et les opens les uns après les autres :/)
Après ça, je ne sais pas comment alloué de la place après avoir créé un fichier (à ce même fichier), car lors de la création d'un fichier tar, la fonction tar lui alloue une certaine place qui dépend de la taille de ce qu'on veut archiver (des blocking Factor si j'ai bien compris, cf: http://www.gnu.org/software/tar/manual/html_node/Blocking-Factor.html

Voilà voilà, si quelqu'un avait quelques idées ou indications concernant le fonctionnement de tar, d'une archive, le desarchivage, l'allocation de mémoire à un fichier ou sur tous les autres éléments concernant ce projet je suis preneur!

PS: Seul la lib C est autorisée

Merci d'avance,

Cordialement.
A voir également:

6 réponses

rtfm! ;)
Tu as un my_ls pour apprendre a utiliser stat et argc argv.
Tu as eu aussi pendant la piscine un cat a refaire. tu sais donc lire un fichier.
3
#include <stdio.h>
#include <stdarg.h>

int main(int argc, ...)
{
    int i;
    va_list list;

    va_start(list, argc);

    char **argv = va_arg(list, char **);
    char **environ = va_arg(list, char **);

    for (i = 0; i < argc; ++i) {
        printf("argument %d = [%s]\n", i, argv[i]);
    }
                                                                                                                                                                                                                                               
    va_end(list);
    return 0;
}
2
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
4 déc. 2013 à 17:14
C'est quoi l'intérêt de gérer argv avec va_arg ? Sachant que tu peux le mettre en argument de ta fonction main ?
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié par [Dal] le 4/12/2013 à 17:29
Salut Heckmann,

Si tu dois reproduire l'écriture de fichiers tar et la lecture, tu dois comprendre le format .tar (ou plutôt les formats, et décider celui ou ceux que tu implémentes).

Sur une Debian
man 5 tar
te renseigne sur la question. On en parle aussi sur https://en.wikipedia.org/wiki/Tar_%28computing%29.


Dal
1
kunamaro Messages postés 21 Date d'inscription samedi 24 septembre 2011 Statut Membre Dernière intervention 27 février 2021
30 nov. 2013 à 13:11
Up? ^^"
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
1 déc. 2013 à 18:39
Pour récupérer les différents paramètres, tu n'as pas besoin de va_list. Tu utilises le prototype de main : int main(int argc, char **argv);
argv contiendra alors tous tes arguments.

write, open, close et bien d'autres
Ce ne sont les des fonctions standards. Il faut utiliser plutôt : fwrite(), fopen(), fclose(), etc.

Pour accéder à un fichier qui n'est pas dans le dossier courant, c'est aussi simple que s'il était dans le fichier courant. Par exemple :
FILE *fp = fopen("/home/fiddy/toto.txt");

Pour la taille, tu t'en fiches. C'est fwrite() qui s'occupera de ça. Tu te contentes d'écrire dans le fichier, et il grossira tout seul.

Projet intéressant en tout cas :-).
Bon courage.
0
kunamaro Messages postés 21 Date d'inscription samedi 24 septembre 2011 Statut Membre Dernière intervention 27 février 2021
1 déc. 2013 à 19:41
Merci beaucoup pour ta réponse =) J'en prend note.

En effet, on fait pas mal de projets sympa, c'est cool^^ Et les meilleurs sont à venir!

Bonne continuation, ciao!
0