IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Exercice : Comment stocker option de récursivité ?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 85
    Par défaut Exercice : Comment stocker option de récursivité ?
    Bonsoir,

    Afin de m'entraîner j'essaye de faire des exercices trouver sur internet, cependant je bloque actuellement pourriez-vous me guider ?

    Je suis actuellement entrain d'écrire la fonction ls avec quelques options, je bloque sur la récursivité -R. A l'heure actuel j'ai pris l'initiative d'utiliser une liste doublement chainée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    typedef struct		s_opt
    {
    	int				opt;
    	int				l;
    	int				r;
    	int				R;
    	int				t;
            //[...]
    }					t_opt;
    typedef struct		s_info
    {
    	char			*name;
            char                  *path;
    	struct stat		buf;
    	char			*error; //enregistre l'erreur associer au fichier/repertoire
    	char			type; //fichier ou repertoire ?
     
    	struct s_info	*next;
    	struct s_info	*prev;
    }
    Je stocke les arguments du main (donc les arguments de la commande ls) en les plaçant au fur et à mesure à la bonne place par ordre lexicographie (Je n'enregistre pas encore le contenu du repertoire à cet instant). A vrai dire je ne sais pas ou stocker le contenu des répertoires ... à la suite de la liste ? mais comment vais-je différencier les niveaux d'imbrication ?
    Je stock les informations car je compte faire un tri par date si l'utilisateur entre par exemple : ./a.out -Rt
    Comme vous avez pu l'observer mon problème est plus un problème d'organisation, de logique, j'attend vos remarques sur comment je traite le problème et comment vous ferez dans le cas ou je suis à l'ouest.

    Merci, bonne soirée.

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Pourquoi ne pas simplement stocker les options de la même manière que le main() les stocke ? C'est à dire dans un char *[] et un int ???

    Exemple
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    int main(int argc, char *argv[])
    {
        ls (argc, argv);
    }
     
    void ls (int argc, char *argv[])
    {
        // Récupération des options en utilisant getopt
        ...
     
        // Ouverture répertoire
        opendir(...)
     
        // Traitement fichiers
        for (...)
        {
            // Si le fichier traité est un répertoire et que l'option "R" est positionnée
            if (...)
            {
                 // Récursivité
                 ls(argc, argv);
            }
        }
        closedir(...);
    }

    Effectivement ça fait n fois le même traitement de récupération mais ça simplifie ton soucis...

    PS: tu n'as aucunemet besoin d'enregistrer le contenu du répertoire comme tu le dis...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    872
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 872
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    PS: tu n'as aucunemet besoin d'enregistrer le contenu du répertoire comme tu le dis...
    Tu veux faire comment le traitement sur la sortie de ton programme sans ?

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 85
    Par défaut
    Bonjour,

    Merci pour vos réponses, cependant comme le souligne imperio, sans stocker les informations je ne peux plus traiter la sortie en fonction des autres options.
    ./a.out -Rlt
    Je dois enregistrer dans ma liste toute la récursivité -R puis j'y applique l'option -l en parcourant la liste, puis je finis par trier les éléments de ma liste en fonction de la date d'acce de chaque élément ( par exemple ). Ce que tu me proposes Sve@r ça fonctionne uniquement dans le cas ou je ne peux avoir que l'option -R ^^

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par imperio Voir le message
    Tu veux faire comment le traitement sur la sortie de ton programme sans ?
    Ouais t'as raison. Je m'étais cantonné à l'affichage des fichiers dans l'ordre du readdir() sans penser au tri par date ou par un autre critère (comme le nom)...

    Citation Envoyé par sbill Voir le message
    Je dois enregistrer dans ma liste toute la récursivité -R puis j'y applique l'option -l en parcourant la liste, puis je finis par trier les éléments de ma liste en fonction de la date d'acce de chaque élément ( par exemple ).
    Absolument pas. Si (comme je le crois) tu veux reproduire le comportement du ls -Rt, alors le contenu du dossier courant est trié et affiché par date ; puis ensuite chaque sous-dossier est lui-aussi affiché de la même manière.

    C'est à dire que si t'as
    -rw-r--r-- 10h25 dossier/toto
    drwxr-xr-x 10h10 dossier/fils
    -rw-r--r-- 10h12 dossier/fils/fic1
    Alors il affichera d'abord fils, puis toto, puis ensuite le contenu de fils c'est à dire fic1 (et ceci même si fic1 est plus récent que toto). Donc ta fonction ls() n'a pas besoin de stocker toute la récursivité mais seulement le contenu du dossier courant...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    872
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 872
    Par défaut
    J'ajoute à la réponse de Sve@r qu'il te suffit alors de rappeler ta fonction dans laquelle tu fais tout ton traitement (récursivité !). Ainsi, elle fera comme si elle lisait son propre dossier et fera de même avec un sous-dossier en se rappelant, etc...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 16/04/2011, 15h05
  2. Comment stocker la valeur d'un ensemble Set Of ?
    Par sfxElrick dans le forum Langage
    Réponses: 17
    Dernier message: 26/01/2005, 10h37
  3. Comment stocker du multimédia dans ma bdd?
    Par Invité dans le forum Décisions SGBD
    Réponses: 9
    Dernier message: 22/08/2003, 09h44
  4. Comment stocker un ficher dans une table postgres
    Par josoft dans le forum Requêtes
    Réponses: 3
    Dernier message: 23/06/2003, 16h41
  5. Vous gerez comment les options d'un programme?
    Par n0n0 dans le forum C++Builder
    Réponses: 5
    Dernier message: 17/05/2002, 13h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo