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

Shell et commandes GNU Discussion :

Algorithme commande find (Unix)


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 25
    Par défaut Algorithme commande find (Unix)
    Bonjour à tous,
    J'ai cherché une documentation sur la commande find, j'en ai trouvé des dizaines, mais j'ai voulu connaitre le principe de fonctionnement de cette commande, et là j'ai rien trouvé. Mon but est de créer une commande presque similaire à la commande find, mais à partir de zero, et ce en langage C. Est-ce qu'il y aurait quelqu'un qui a une documentation sur cette commande ? je parle de son principe, et/ou son algorithme, car le code source je l'ai mais j'ai rien compris dedans :p. Merci beaucoup pour vos réponses.

  2. #2
    Membre émérite
    Homme Profil pro
    Recherche du travail
    Inscrit en
    Août 2004
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Recherche du travail

    Informations forums :
    Inscription : Août 2004
    Messages : 561
    Par défaut
    La commande find est un ls, qui filtre le résulta selon des arguments, comme la date etc... Voici un début :

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    #include
    #include
    #include
    #include
    <dirent.h>
    <regex.h>
    <stdio.h>
    <stdlib.h>
    regex_t motif_recherche;
    int
    selection(const struct dirent * entree)
    {
    if (regexec(& motif_recherche, entree -> d_name, 0, NULL, 0) == 0)
    return 1;
    return 0;
    }
    int
    main (int argc, char * argv[])
    {
    struct dirent ** liste;
    int
    nb_entrees;
    int
    i;
    if (argc != 3) {
    fprintf(stderr, "Syntaxe : %s répertoire motif\n", argv [0]);
    exit(EXIT_FAILURE);
    }
    if (regcomp(& motif_recherche, argv[2], REG_NOSUB) !=0) {
    fprintf(stderr, "Motif illégal\n");
    exit(EXIT_FAILURE);
    }
    nb_entrees = scandir(argv[1], & liste, selection, alphasort);
    if (nb_entrees <= 0)
    exit(EXIT_SUCCESS);
    for (i = 0; i < nb_entrees; i ++) {
    fprintf(stdout, " %s\n", liste[i]->d_name);
    free(liste[i]);
    }
    fprintf(stdout, "\n");
    free(liste);
    return EXIT_SUCCESS;
    }
    Source : Programmation C sous Linux, édition Eyerolles.

    Si tu souhaite plus de détail sur ce bout de code, n'hésite pas

  3. #3
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 25
    Par défaut
    Merci beaucoup pour ta réponse Senaku-seishin,
    J'aimerai bien avoir plus d'explications si c'est possible, merci Je pense que le faite que je sois un peu débutant m'a empéché de bien comprendre ... Je veux juste connaitre le principe comme une analyse procédurale ou modulaire si c'est possible. Merci encore une fois de m'avoir répondu !!

  4. #4
    Membre émérite
    Homme Profil pro
    Recherche du travail
    Inscrit en
    Août 2004
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Recherche du travail

    Informations forums :
    Inscription : Août 2004
    Messages : 561
    Par défaut
    Je veux juste connaitre le principe comme une analyse procédurale ou modulaire si c'est possible.
    Tu veux la logique d'une commande find?
    1. Analyse des arguments. Voir : getopt
    2. Listé les fichiers des répertoires - récursif - dans une pile
    3. Filtré la pile selon les critères demandé.
    4. Trie de la pile
    5. Affiché le contenus de la pile. Voir fprintf


    On fusionne généralement l'étape 2 et 3.
    Regarde du côté de scandir. Il lit le contenu d'un répertoire, filtre et trie mais non récursif. Ou utilise nftw, récursif mais sans trie.

    Le filtre dépendra des critères que tu voudra.

  5. #5
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 25
    Par défaut
    Merci beaucoup Senaku-seishin pour ta réponse C'est ce que je voulais effectivement, une analyse logique, je me suis mal exprimé au début Encore merci pour ton aide précieuse !!

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 4
    Par défaut Projet de la commande find
    Bonjour,
    Je suis debutant en c.
    Je dois fiare la commande find.
    Je suis entrain de faire actuellement mon parsing pour cerner le projet,
    Du coup,est ce que vous pouvez m'aider a elaborer mon algo.
    Et aussi, dans le bon de code je veux bien savoir les composante de votre strcuture.

    Je vous remercie d'avance.

    Cordialement,

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

Discussions similaires

  1. [Système]commandes linux / unix depuis java
    Par msiramy dans le forum API standards et tierces
    Réponses: 12
    Dernier message: 20/03/2007, 11h29
  2. Execution d'une commande Shell Unix
    Par boubakary dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 17/06/2006, 20h36
  3. Option -prune avec la commande find
    Par gangsoleil dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 21/04/2006, 17h43
  4. La commande Find d'un recordset
    Par christel1982 dans le forum ASP
    Réponses: 22
    Dernier message: 14/11/2005, 20h36
  5. La commande find
    Par Invité4 dans le forum Shell et commandes GNU
    Réponses: 9
    Dernier message: 22/03/2005, 14h46

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